使用gomobile gobind生成iOS Objective-C类时,错误返回的布尔值取值规则咨询
gomobile gobind生成iOS Objective-C类时,错误返回的布尔值取值规则咨询
我之前也踩过这个坑,翻了gomobile的内部实现才搞明白,给你明确说下这个布尔值的规则:返回YES代表操作成功,NO代表操作失败,完全贴合Objective-C原生的错误处理逻辑。
具体对应关系是:
- 当Go侧的方法返回
nil(没有错误)时,Objective-C生成的方法会返回YES,同时你传入的NSError指针不会被赋值; - 当Go侧返回非
nil的error时,Objective-C方法会返回NO,同时会把Go的错误信息转换为NSError对象填充到你传入的指针里。
拿你给出的例子来说:
Go侧的接口定义:
type A interface { DoThing(data *DataType) error }
生成的Objective-C接口:
@interface PackageA : NSObject <goSeqRefInterface, PackageA> { } @property(strong, readonly) _Nonnull id _ref; - (nonnull instancetype)initWithRef:(_Nonnull id)ref; // 核心方法 - (BOOL)doThing:(data* _Nullable)DataType error:(NSError* _Nullable* _Nullable)error; @end
如果Go里的DoThing执行成功没报错,OC调用这个方法会得到YES,error参数是空的;如果Go里返回了错误,OC这边就会拿到NO,同时error里会有对应的错误详情供你处理。
其实这个设计就是对齐了Objective-C的标准写法——几乎所有原生OC里带NSError**参数的方法,都是用返回布尔值来标识操作成败,失败时才会输出错误对象,所以完全可以按照你平时写原生OC代码的习惯来用就行。
备注:内容来源于stack exchange,提问作者scosman
相关产品推荐
相关产品推荐

