问题是:模型对象是在框架中定义的,协议是在app目标中定义的。app目标具有框架知识,反之亦然,因此协议一致性不能出现在模型对象的声明中。
然而,模型对象已经拥有实现协议所需的大部分字段(主要是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 }
}但另一个选择是什么?被拒绝/失败的想法:
这整件事似乎是一个常见的场景,只是为了说明一个类型已经实现了协议。我们是否错过了任何简单的方法来做到这一点,或者我们是否有理由/如何选择上述方法?谢谢。
发布于 2015-08-07 15:20:22
对于我来说,这是可行的,没有编译器仍然能够找到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!
发布于 2015-08-08 22:55:04
如果您忽略了扩展中的实现,编译器应该会帮您解决这个问题。因此,这应该被认为是一个错误(链接器错误)。
你更新到Xcode 7 beta 5了吗?因为这个版本解决了其中的一些问题。
https://stackoverflow.com/questions/31881123
复制相似问题