名称中带有“With”的Swift重载方法

时间:2015-11-29 21:12:51

标签: objective-c swift

Apple喜欢使用doThisWithPoint:doThisWithTouch:这样的方法名称,我想 - 尽管我有这么小的XP,我可能错了 - 在Swift Apple中你希望你用{进行签名{1}}和doThis(withPoint : CGPoint)因此您可以重载方法,并且在创建桥时,Objective-C接口看起来像doThis(withTouch : UITouch)但现在我收到错误,说明了选择器{{ 1}}已经存在。

关于在Swift中命名和重载方法的最佳方法的任何解释都会有所帮助。不仅是它运行的原因,还有什么是惯用的方式。谢谢!

2 个答案:

答案 0 :(得分:1)

来自The Swift Programming Language

  

默认情况下,省略第一个参数的外部名称,第二个和后续参数使用其本地名称作为外部名称。

您需要将withPointwithTouch作为功能名称的一部分。像Swift一样在Swift中声明你的方法:

class MyObject: NSObject {    
    func doThisWithPoint(point: CGPoint) {
    }
    func doThisWithTouch(touch: UITouch) {
    }
}

然后你可以在Objective-C中调用它们:

[myObject doThisWithPoint:point];
[myObject doThisWithTouch:touch];

答案 1 :(得分:0)

我为您找到了这个:Overload problem 1Overload problem 2如果您对方法使用不同的名称,可以使用一个解决方案。

  

要解决此问题,请使用不同的名称:如func perform1(operation:Type)和func perform2(operation:otherType)。