我有一个具有泛型类型的类,需要作为一个对象。而且我不能将具有类类型的协议用作此类的类型。
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的通用类型,以允许具有类类型的协议。