【发布时间】:2016-08-19 03:13:01
【问题描述】:
我正在使用 Swift 2 和 Xcode 7.3 开发一个项目,但遇到了一个我还不明白原因的错误。
我创建了一个名为 Resource 的协议,它有一个 associatedtype 和一个 static var 类型。
在其扩展中,我正在尝试创建static var 的getter 的默认实现,其中类型是通用struct,它实现另一个protocol,称为ResourceFinderProtocol。
这一切都编译得很好,但是在运行时,当执行下面 sn-p 的最后一行时,它会产生 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()
对这里可能发生的事情有什么想法吗?
编辑:
正如 Alexander 指出的那样,即使我将调用拆分为:
let localObjects = Model.localObjects
let allObjects = localObjects.all()
...它仍然在第一行崩溃。
【问题讨论】:
-
顺便说一句,
Model.localObjects也崩溃了。
标签: swift generics swift2 protocols