Ответ 1
Как отмечает @sgaw, это было подтверждено как известная ошибка инженеров Apple (для Xcode 6 Beta - версия 6.0 (6A215l))
У меня есть простой сценарий, в котором у меня есть родительский класс 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
Как отмечает @sgaw, это было подтверждено как известная ошибка инженеров Apple (для Xcode 6 Beta - версия 6.0 (6A215l))
Мне удалось обойти это в моем случае, перейдя в базовый класс:
(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"
Я получил эту ошибку, потому что у меня было два свойства, объявленные с тем же именем.
В Objective-C компилятор использовал, чтобы дать ошибку в строке, объявленной свойством. Что-то вроде "дублирующее свойство".
Теперь в Swift вы получите "Неоднозначное использование..." на линии, которую вы используете для свойства... и вам нужно искать везде, чтобы найти дублирующее свойство.