[英]Swift extension for protocol conformance on object in framework causes infinite loop
问题:模型对象在框架中定义,协议在应用程序目标中定义。 应用程序目标了解框架,但反之则不然,因此协议一致性不能出现在模型对象的声明中。
但是,模型对象已经具有实现协议所需的大多数字段(主要是var {get}声明),并且-显然这是摩擦-这些字段具有相同的名称。 实际模型中大约有20个属性。
毫不奇怪,以下模式会产生无限循环:
//Framework Target:
public struct Book {
public let numberOfPages : Int
}
。
//App target:
public protocol BookViewDataSource {
var numberOfPages : Int { get }
}
extension Book : BookViewDataSource {
public var numberOfPages : Int { return self.numberOfPages }
}
但是有什么选择呢? 拒绝/失败的建议:
这整个事情似乎很普通,只是说明类型已经满足了协议。 我们是否缺少任何简便的方法来执行此操作,或者是否有理由为什么/如何选择上述方法? 谢谢。
这对我有用,省去了实现声明,编译器仍然可以找出Book的符合性:
public struct Book {
public let numberOfPages : Int
}
public protocol BookViewDataSource {
var numberOfPages : Int { get }
}
extension Book : BookViewDataSource {
}
let x = Book(numberOfPages: 3)
print(x)
以上内容可在SwiftStub上使用,目前无法使用Mac!
如果您忽略扩展中的实现,则编译器应为您解决。 因此,应将其视为错误(链接器错误)。
您是否更新到Xcode 7 beta 5? 由于此版本解决了其中的一些问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.