Swift &引用;使用';propertyName'&引用;使用didSet observer指定重写属性时出错

Swift &引用;使用';propertyName'&引用;使用didSet observer指定重写属性时出错,swift,Swift,我有一个简单的场景,其中有一个父类Person,它定义了一个名为“name”的属性,并包含一个“didSet”观察者 class Person { var name: String? { didSet { println("Person name was set.") } } init() {} } 我还有一个名为Employee的Person子类,它为“name”属性添加了自己的“didSet”观察器,以便它可以监视对该属性的更改

我有一个简单的场景,其中有一个父类Person,它定义了一个名为“name”的属性,并包含一个“didSet”观察者

class Person {

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

    init() {}
}
我还有一个名为Employee的Person子类,它为“name”属性添加了自己的“didSet”观察器,以便它可以监视对该属性的更改

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所指出的,苹果工程师已经确认这是一个已知的bug(对于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上,您可以在用于属性的行上看到“模糊使用…”。。。您必须到处查找以找到重复的属性。

我可以毫无错误地运行此代码。即使在添加了
println(employer.name)
之后,我也会输出“Sally”。同样,你确定没有其他东西干扰你的代码吗?我不确定还有什么可能会干扰。我列出的“练习”代码在我的AppDelegate类中的应用程序(application:didFinishLaunchingWithOptions:)方法中。我只是想让您知道,您并不是唯一一个遇到重写问题的人。我在尝试从Swift编程语言复制代码时遇到了同样的问题。作为后续,这是一个已知的错误:在苹果修复之前,有人知道如何解决这个错误吗?我看到的是完全相同的行为,我认为这一点特别明确:P@user1021430例如我刚刚遇到了这个问题。我有一个返回[UIColor]的方法。使用let colors=method()-explicit casting消除了错误-let colors=method()为[UIColor]。我的假设是,歧义指向编译器不知道如何利用返回值。但问题一直存在,我在类型的静态扩展中看到了这一点。我无法说出ProjectName.TypeName,因为该类型是内部类型。