Невозможно использовать протокол с типом класса, где ожидается AnyObject
У меня есть класс с универсальным типом, который должен быть объектом. И я не могу использовать протокол с типом класса в качестве типа для этого класса.
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, чтобы разрешить также протоколы с типом класса.