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

0 ответов

Другие вопросы по тегам