1

我正在使用 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()
    }

}

只是得到了不同的错误: 第二个错误图像

我应该如何创建具有关联类型和变量的协议并避免此错误?

4

1 回答 1

2

编译器需要一个T符合SomeProtocol.

虽然这条线看起来正确

var variable: SomeProtocol

编译器遇到的问题SomeProtocol不是类型,而是协议。

最简单的解决方案,告诉编译器使用的类型

var variable: SomeProtocolImpl = SomeProtocolImpl()

或者让它自己弄清楚。

var variable = SomeProtocolImpl()
于 2016-11-02T15:26:49.277 回答