【发布时间】:2018-04-28 16:55:13
【问题描述】:
我正在尝试使用 Flutter 编写移动应用程序。不幸的是,我需要实现一个 Flutter 插件才能调用一些原生 API。
Objective-C 对我来说太陌生了,所以我真的更喜欢使用 Swift(我也不太了解,但它与 Kotlin 足够接近,我觉得很熟悉)来创建插件。
我通过 Flutter 获得了插件骨架设置,但现在我正在尝试实现方法处理函数:
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult)
我尝试使用的本机函数具有此签名(使用 gomobile 生成):
FOUNDATION_EXPORT MobileapiDatabase* MobileapiReadDatabase(
NSString* filePath, NSString* password, NSError** error);
虽然有几件事我不明白:
- 如何使用
result对象返回错误? - 方法没实现怎么报?
- 如何使用原生函数的
error对象?
我只能找到 Objective-C 示例,没有一个通过谷歌搜索找到的 Swift 示例(我发现的唯一示例没有处理错误或其他任何内容)。
这是我目前得到的:
public func handle(_ call: FlutterMethodCall,
result: @escaping FlutterResult) {
switch call.method {
case "getDb":
let args = call.arguments as! [String]
if args.count == 2 {
let error = NSError() // ERROR in next line
MobileapiReadDatabase(args[0], args[1], error)
// how to check if there was an error?
}
// TODO report wrong arguments
default:
// TODO report method not implemented
}
}
非常感谢任何帮助。
【问题讨论】: