我有一些项目,我为我的需要创建了方便的架构,所有的事情都很好,直到我在运行时遇到了EXC_BAD_ACCESS
的神秘崩溃。我张贴here代表的问题,在这里最小码的解释是:简单代码中的神秘EXC_BAD_ACCESS
想象一些,另一个是第一的孩子:
protocol Base {
static var key: String { get }
}
protocol BaseChild: Base {
}
,这里是一些简单的实现:
struct ChildEntity: BaseChild {
static var key: String {
return "key"
}
}
然后,我有一些类与这些实体一起工作:
class Worker {
static var defaultWorker: Worker? // will explain later
func work<T: Base>(entity: T) {
print(T.key)
}
}
而且我也有一些Worker
子类:
class ChildWorker: Worker {
override func work<T: BaseChild>(entity: T) {
print(T.key)
}
}
到目前为止好。然后,我添加静态defaultWorker
VAR我Worker
类,以便访问我的默认工作更容易,这让我创造我Base
协议的扩展,它会与我defaultWorker
工作:
extension Base {
func work() {
Worker.defaultWorker?.work(entity: self)
}
}
然而,这产生EXC_BAD_ACCESS
在运行时。下面是简单的使用:
class Test {
static func run() {
let object = ChildEntity()
let worker = ChildWorker()
worker.work(entity: object) // OK here
Worker.defaultWorker = worker
object.work() // EXC_BAD_ACCESS here
}
}
我斯威夫特3和斯威夫特测试了这个在Xcode中8和9的Xcode 4都请帮我解决这个问题
尝试做'object.work'(删除'()')...或者离开它并且执行'Test.run' –
@ l'L我很感谢你,但是这样做有什么意义?我可以通过简单评论这条线获得相同的结果。我的意思是删除括号将停止执行我的功能,但我需要它的工作 – Azat
这对发生了什么是有帮助的...错误在'Worker.defaultWorker?.work(entity:self)' –