我有一些項目,我爲我的需要創建了方便的架構,所有的事情都很好,直到我在運行時遇到了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)' –