Подтвердить что ты не робот

"Неоднозначное использование ошибки" propertyName "для данного переопределенного свойства с помощью наблюдателя didSet

У меня есть простой сценарий, в котором у меня есть родительский класс Person, который определяет свойство, называемое "name", и включает в себя наблюдателя "didSet"...

class Person {

    var name: String? {
    didSet {
        println("Person name was set.")
    }
    }

    init() {}
}

У меня также есть подкласс Person called Employee, который добавляет свой собственный наблюдатель "didSet" для свойства "name", чтобы он мог отслеживать изменения этого свойства...

class Employee: Person {

    override var name: String? {
    didSet {
        println("Employee name was set.")
    }
    }

}

Когда я пытаюсь использовать код, я получаю ошибку компиляции, но я не могу понять, почему и как его исправить. Здесь код, который выполняет эти классы...

var person = Person()
person.name = "Bob"

var employee = Employee()
employee.name = "Sally"  // results in "Ambiguous use of 'name'" compile error
4b9b3361

Ответ 1

Как отмечает @sgaw, это было подтверждено как известная ошибка инженеров Apple (для Xcode 6 Beta - версия 6.0 (6A215l))

https://devforums.apple.com/thread/229668?tstart=0

Ответ 2

Мне удалось обойти это в моем случае, перейдя в базовый класс:

(employee as Person).name = "Sally"

По-прежнему кажется, что она правильно отправлена ​​в подкласс. Например:

class Person {
    var name: String {
            return "person"
    }
}

class Employee: Person {
    override var name: String {
        return "employee"
    }
}

let bob = Person()
let alice = Employee()

println((alice as Person).name) // prints "employee"

Ответ 3

Я получил эту ошибку, потому что у меня было два свойства, объявленные с тем же именем.

В Objective-C компилятор использовал, чтобы дать ошибку в строке, объявленной свойством. Что-то вроде "дублирующее свойство".

Теперь в Swift вы получите "Неоднозначное использование..." на линии, которую вы используете для свойства... и вам нужно искать везде, чтобы найти дублирующее свойство.