objective-c - 在 Objective C 中使用带有重载方法的 Swift 类

标签 objective-c swift overloading

目前,我的项目同时使用 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/

相关文章:

iphone - 在没有文本字段/ View 的情况下获取键盘输入

ios - 为什么谷歌地图无法使用谷歌地图 API 在 iOS 中加载?

iphone - 我可以将我的 C++ 类编译成静态库 (.a) 以便在我的 iPhone 项目中使用吗?

objective-c - ConnectionKit 和 SFTP : How to authenticate CK2FileManager

ios - AFNetworking - 60 秒等待后超时间隔未达到预期

xcode - Swift 代码完成不起作用

C++ 函数接受指针和引用

ios - 将 UITableViewCell 变成一排按钮/手势识别器?

c++ - 如何实现类似于 std::vector 的自定义类

c# - 具有 "params"关键字的方法的多个重载