Compiler error: 写Swift报出 Obj-C 选择器不允许重载

在学习Swift开发过程中,遇到一个编译错误,提示Objective-C选择器冲突。原因是Objective-C不支持方法重载,而Swift支持。解决办法是将冲突的方法之一声明为私有。当Swift代码继承UIViewController时,由于它间接继承自Objective-C的NSObject,因此会出现此错误。移除UIViewController继承或使方法私有化可避免报错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Compiler error:Method with Objective-C selector conflicts with previous declaration with the same Objective-C selector

在跟着上斯坦福的Developing iOS 8 Apps with Swift 课程,在用Swift重写方法时发生错误,报错代码如下:

class ViewController: UIViewContoller
{
    func performOperation(operation: (Double,Double) -> Double){}    
    func performOperation(operation: Double -> Double){}
}

然后报出的编译错误是:

Compiler error:
Method with Objective-C selector conflicts with previous declaration with the same Objective-C selector

给出一个解决方法:

Solution:
将其中一个方法 转为私有方法:
private func performOperation(operation: Double -> Double){}

报错原因

Reason
Obj-C不支持方法的重载(Overloading),所以得用不同的方法名来写方法;当方法继承UIViewController,就继承了NSObject,这是Obj-C的类,所以你写相同方法名的时候会报错;
Swift支持方法的重载,所以你不继承Obj-C类时,编译器不报错;

去除UIViewController时的情况不报错 如下:

class ViewController
{
    func performOperation(operation: (Double,Double) -> Double){}    
    func performOperation(operation: Double -> Double){}
}

关于Xcode版本与Swift的变化可以看这个链接:
https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc6_release_notes.html#//apple_ref/doc/uid/TP40001051-CH4-SW1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值