码:
extension UIVIEwController { public overrIDe func shouldautorotate() -> Bool { return false } public overrIDe func supportedInterfaceOrIEntations() -> UIInterfaceOrIEntationMask { return UIInterfaceOrIEntationMask.Portrait }}
错误:
Method 'shouldautorotate()' with Objective-C selector 'shouldautorotate' conflicts with prevIoUs declaration with the same Objective-C selector Method does not overrIDe any method from its superclass Method 'supportedInterfaceOrIEntations()' with Objective-C selector 'supportedInterfaceOrIEntations' conflicts with prevIoUs declaration with the same Objective-C selector
在这里,我错过了什么?
我正在使用Xcode 7.3.1和Swift 2.x.
编辑:
从Answers下面,我知道我们不能像在Objective C CategorIEs中那样在Swift扩展中改变运行时类的现有方法的行为.在这里,我应该创建一个将覆盖方法的基类,我应该使用我的所有VIEwControllers作为新基类的子类作为父类.
但就我而言,我想改变所有“shouldautorotate”方法的行为,包括第三方框架UIVIEwController.在上面的例子中,我不能强制所有第三方框架UIvIEwControllers成为我的基类的子类.在Objective C中,我可以做到这一点.
解决方法 Swift扩展不能用于覆盖它们扩展的类中声明的方法 – 特别是对于Objective-C类,这非常类似于在同一个类中提供相同方法的两个定义.想象一下,看到一个看起来像这样的课程:class UIVIEwController : UIResponder { public func shouldautorotate() -> Bool { return true } public func shouldautorotate() -> Bool { return false }}
哪一个获胜?这就是你被警告的冲突.
如果您需要覆盖您的视图控制器的方法,则需要在子类中执行此 *** 作,而不是扩展.
Ninja编辑:这可能在Objective-C中可以做到,但那里是一个编程错误.如果类别与主类重复方法,则使用哪个定义是未定义的.见this SO post和backing Apple documentation.
总结以上是内存溢出为你收集整理的ios – Swift Extension – 方法与先前使用相同Objective-C选择器的声明冲突全部内容,希望文章能够帮你解决ios – Swift Extension – 方法与先前使用相同Objective-C选择器的声明冲突所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)