You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:59:36