Swift 1.2重新声明Objective-C方法

UnR*_*ewa 10 properties redeclaration swift

我刚从swift 1.1更新到swift 1.2并得到编译错误:

Method 'setVacation' redeclares Objective-C method 'setVacation:'
Run Code Online (Sandbox Code Playgroud)

这里有一些代码:

var vacation : Vacation?  
func setVacation(_vacation : Vacation)
{...}
Run Code Online (Sandbox Code Playgroud)

但我需要打电话 setVacation

有什么建议如何解决这个问题?

Kir*_*ins 8

这是由Xcode 6.3beta发行说明中所述的变化引起的:

Swift现在可以检测Swift类型系统中的重载和覆盖之间的差异以及通过Objective-C运行时看到的有效行为.(18391046,18383574)例如,现在诊断出类中"属性"的Objective-C setter与其扩展中的方法"setProperty"之间存在以下冲突:

 class A : NSObject {
     var property: String = "Hello" // note: Objective-C method 'setProperty:’
                                    // previously declared by setter for
                                    // 'property’ here
 }
 extension A {
     func setProperty(str: String) { } // error: method ‘setProperty’
                                       // redeclares Objective-C method
                                       //'setProperty:’
 }
Run Code Online (Sandbox Code Playgroud)

要解决此问题,您需要使所有方法签名都是唯一的(因为Objective-C不提供方法重载)

或者NSObject如果你只需要Swift课程,就不要继承.