繁体   English   中英

Swift func()可以向Objective-C调用者返回多个值吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM