本文介绍了Swift 1.2 重新声明 Objective-C 方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I just updated from swift 1.1 to swift 1.2 and get compiler Error:

Method 'setVacation' redeclares Objective-C method 'setVacation:'

这里有一些代码:

var vacation : Vacation?
func setVacation(_vacation : Vacation)
{...}

但我需要调用 setVacation

有什么建议可以解决这个问题吗?

Is any suggestions how fix this?

推荐答案

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

This is cause by the change stated in Xcode 6.3beta release notes:

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:’
 }

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

To fix this you need to make all you method signatures unique (as Objective-C does not provide method overload)

如果您只需要 Swift 类,请不要从 NSObject 继承.

Or don't inherit from NSObject if you need Swift only class.

这篇关于Swift 1.2 重新声明 Objective-C 方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 01:57