无法在预期AnyObject的类类型中使用协议

时间:2018-08-23 19:58:59

标签: swift protocol-oriented

我有一个具有泛型类型的类,需要作为一个对象。而且我不能将具有类类型的协议用作此类的类型。

class Holder<T: AnyObject> {
    var value: T? = nil

    init() {
        self.value = nil
    }

    init(_ value: T) {
        self.value = value
    }
}

protocol ObjectWithValue: class {
    var string: String { get }
}

class MyObject: ObjectWithValue {
    var string: String = "test"
}

let object = MyObject()
let holder1 = Holder(object)

let objectByProtocol: ObjectWithValue = object
let holder2 = Holder(objectByProtocol) // <- Error

let holder3 = Holder<ObjectWithValue>() // <- Error
holder2.value = object

使用Xcode 10 Beta 6时出现以下错误:

ClassType.playground:25:15: Cannot invoke initializer for type 'Holder<_>' with an argument list of type '(ObjectWithValue)'

ClassType.playground:27:15: 'Holder' requires that 'ObjectWithValue' be a class type

这是编译器的错误还是预期的行为?如何指定Holder的通用类型,以允许具有类类型的协议。

0 个答案:

没有答案