我正在使用Swift 2和Xcode 7.3处理项目,并面临一个我无法理解原因的错误。Swift:EXC_BAD_ACCESS从实现协议的泛型类型调用方法
我已经创建了一个名为Resource
的协议,其中有一个associatedtype
和static var
这种类型。
里面它的扩展,我试图创建static var
的吸气剂,其中类型是一个通用struct
实现另一个称为ResourceFinderProtocol
的默认实现。
这一切都编译好,但在运行时,当执行下面代码片段的最后一行时,它会产生一个EXC_BAD_ACCESS
崩溃。
如果我使struct ResourceFinder
不通用,它工作顺利。
protocol Resource {
associatedtype ResourceFinderType
static var localObjects: ResourceFinderType { get }
}
extension Resource {
static var localObjects: ResourceFinder<Self> {
return ResourceFinder()
}
}
public protocol ResourceFinderProtocol {
associatedtype ResourceType
func all() -> [ResourceType]
}
struct ResourceFinder<T:Resource>: ResourceFinderProtocol {
func all() -> [T] {
return []
}
}
struct Model: Resource {}
Model.localObjects.all()
有什么想法可以在这里发生什么?
编辑:
正如亚历山大指出,即使我分裂成电话:
let localObjects = Model.localObjects
let allObjects = localObjects.all()
...它仍然崩溃在第一线。
跟踪它顺便说一句,'Model.localObjects'也崩溃。 –