【发布时间】:2022-10-21 01:18:32
【问题描述】:
我正在使用Pigeon 库来连接 Flutter 和本机平台代码,尤其是带有 Swift 的 iOS。
我想从 Swift 调用一个颤振函数并得到一个值,所有这些都是同步的。
Flutter 上的函数定义如下:
@FlutterApi()
abstract class MyFlutterApi {
String? didSyncFunctionCalled();
}
这里是斯威夫特代码:
let flutterApi: MyFlutterApi?
public func callSyncFunction() -> String? {
flutterApi?.didSyncFunctionCalled(completion: { (value: String?, error: Error?) in
return value
})
}
如您所见,该函数返回一个字符串(可为空),我需要来自颤振的字符串。
这个实现是不正确的。我从 XCode 的 return value -> Cannot convert value of type 'String?' to closure result type 'Void' 行得到一个 error
据我了解,Pigeon 总是生成带有错误完成闭包的代码,并最终返回一个值。
这是我不想使用的解决方案:
public func callSyncFunction(completion: @escaping (String?) -> Void) {
flutterApi?.didSyncFunctionCalled(completion: { (value: String?, error: Error?) in
completion(value)
})
}
有没有一种方法可以定义可以在本机代码中这样使用的函数?
public func callSyncFunction() -> String? {
let value: String? = flutterApi?.didSyncFunctionCalled()
return value
}
【问题讨论】:
标签: ios swift flutter dart pigeon