[英]Can Swift func() return multiple values to an Objective-C caller?
如果我有一个如此定义的Swift函数:
func hilo (holeSize : Int, prompt : Int) -> (ballType : Int, ballColor : Int)) {
...
return (result1, result2)
}
有没有办法从Objective-C方法调用这个Swift函数? 我希望使用数组或字典来调用Objective-C中的func来接收func结果。
似乎无法找到讨论此主题的任何doco或其他。
谢谢。
Objective-C中不支持元组(返回多个值的函数),但您可以使用块。
- (void)hilo:(int)holeSize prompt:(int)prompt callback:(void (^)(ballType : Int, ballColor : Int))result {
...
}
[self hilo:(int)holeSize prompt:(int)prompt callback:^(ballType : Int, ballColor : Int) {
....
}];
你不能。 您必须重新编写Swift方法以返回在Objective-C中有效的类型。
来自:Apple Inc. 将Swift与Cocoa和Objective-C结合使用。 iBooks的。
只要与Objective-C兼容,您就可以访问使用@objc属性标记的类或协议中的任何内容。 这不包括仅限Swift的功能,例如此处列出的功能:
- 泛型
- 元组
- Swift中定义的枚举
- Swift中定义的结构
- Swift中定义的顶级函数
- Swift中定义的全局变量
- 在Swift中定义的Typealiases
- Swift风格的可变参数
- 嵌套类型
- 咖喱功能
例如,一个将泛型类型作为参数或返回元组的方法将无法从Objective-C中使用 。
强调我的
通过@ ikmal-ezzani的理想。 我将如下所示制作一个实施细节:
SWIFT代码:
func getResult(_ input: Int) -> (previous: Int, next: Int) {
return (previous: input - 1, next: input + 1)
}
@objc class WrapClass: NSObject {
@objc static func getResult(_ input: Int, callback: ((_ previous: Int, _ next: Int) -> Void)) {
let (previous, next) = YourModel.getResult(input)
callback(previous, next)
}
}
对象C代码:
//to use in Object-C
__block NSInteger pre = 0;
__block NSInteger next = 0;
[WrapClass getResult:10 callback:^(NSInteger preValue, NSInteger nextValue) {
pre = preValue;
next = nextValue;
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.