目前,我的项目同时使用 Swift 和 Objectice-C 语言。为了让它工作,我遵循了 official documentation 中的指南.现在我可以在 Objective-C 中使用 Swift,反之亦然。
但是当某些 Swift 类具有重载方法时,问题就出现了。 Swift 支持方法重载但不支持 Objective-C。
例子:
func random(#lower: Int , upper: Int) -> Int {
return lower + Int(arc4random_uniform(UInt32(upper - lower + 1)))
}
func random(#lower: CGFloat , upper: CGFloat) -> CGFloat {
return CGFloat(arc4random() % 1) / 0
}
自动生成的文件“MyNameProductModule-Swift.h”无法编译,因为存在具有“相同”签名的方法。
问题:
a) 我是否遗漏了一些重要的东西?
b) 除了重命名方法之外,还有其他解决方案吗?
c) 如果我将使用 Swift 创建一个框架/库,如果这个框架/库也被设计为与 Objective C 一起使用,我是否应该注意不要编写任何重载方法?
谢谢!
最佳答案
从 swift2.0 开始,如果您计划在 Objective C 中同时使用两者,您可以区分:
@objc(randomLoInt:HiInt:)
func random(#lower: Int , upper: Int) -> Int {
return lower + Int(arc4random_uniform(UInt32(upper - lower + 1)))
}
@objc(randomLoFlt:HiFlt:)
func random(#lower: CGFloat , upper: CGFloat) -> CGFloat {
return CGFloat(arc4random() % 1) / 0
}
或者如果您根本不打算在项目的 ObjC 端使用它,只需使用:
@nonobjc
func random(#lower: Int , upper: Int) -> Int {
return lower + Int(arc4random_uniform(UInt32(upper - lower + 1)))
}
@nonobjc
func random(#lower: CGFloat , upper: CGFloat) -> CGFloat {
return CGFloat(arc4random() % 1) / 0
}
关于objective-c - 在 Objective C 中使用带有重载方法的 Swift 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25584514/