我正在使用Xcode 7.3和Swift 2.3。我很难使用具有变量的关联类型的协议。看一下这个例子:
protocol SomeProtocol {}
class SomeProtocolImpl: SomeProtocol {}
protocol ProtocolWithAssociatedType {
associatedtype T: SomeProtocol
var variable: T { get }
}
class TestClass: ProtocolWithAssociatedType {
var variable: SomeProtocol = SomeProtocolImpl()
}
由于某种原因,编译器显示错误: 怎么可能?难道我做错了什么?这是一个错误吗?一个已知的?
我尝试过的事情:
为该关联类型定义了类型:
class TestClass: ProtocolWithAssociatedType {
typealias O = SomeProtocol
var variable: SomeProtocol = SomeProtocolImpl()
}
都能跟得上。
改为使用的方法:
protocol SomeProtocol {}
class SomeProtocolImpl: SomeProtocol {}
protocol ProtocolWithAssociatedType {
associatedtype T: SomeProtocol
func someMethod() -> T
}
class TestClass: ProtocolWithAssociatedType {
typealias T = SomeProtocol
func someMethod() -> SomeProtocol {
return SomeProtocolImpl()
}
}
如何创建具有关联类型和变量的协议并避免此错误?
答案 0 :(得分:2)
编译器需要符合T
的{{1}}特定类型。
虽然这条线看起来正确
SomeProtocol
编译器遇到的问题是var variable: SomeProtocol
不是类型,它是协议。
最简单的解决方案,告诉编译器使用的类型
SomeProtocol
或者让它自己搞清楚。
var variable: SomeProtocolImpl = SomeProtocolImpl()