Swift: не удалось присвоить значение свойству протокола?

Класс A предоставляет строковое значение. Класс B имеет два члена типа A внутри себя и предоставляет вычисляемое свойство "v", чтобы выбрать один из них.

class A {
    var value: String

    init(value: String) {
        self.value = value
    }
}

class B {
    var v1: A?
    var v2: A = A(value: "2")

    private var v: A {
        return v1 ?? v2
    }

    var value: String {
        get {
            return v.value
        }
        set {
            v.value = newValue
        }
    }
}

Этот код прост и работает. Поскольку и A, и B имеют член «value», я делаю это протоколом так:

protocol ValueProvider {
    var value: String {get set}
}

class A: ValueProvider {
    var value: String

    init(value: String) {
        self.value = value
    }
}

class B: ValueProvider {
    var v1: ValueProvider?
    var v2: ValueProvider = A(value: "2")

    private var v: ValueProvider {
        return v1 ?? v2
    }

    var value: String {
        get {
            return v.value
        }
        set {
            v.value = newValue // Error: Cannot assign to the result of the expression
        }
    }
}

Если я изменю следующий код

v.value = newValue

в

var v = self.v
v.value = newValue

Это снова работает!

Это ошибка Swift или что-то особенное для свойства протоколов?

Ответы на вопрос(1)

Ваш ответ на вопрос