gomorrow:iOS上的错误返回值有NSError和boolean返回

dfddblmv  于 2023-11-14  发布在  Go
关注(0)|答案(1)|浏览(137)

当在iOS上通过gobind对接口类型使用gobind时,返回error的golang函数会对Objective C中的类产生2个影响(下面的示例):

  • 包含传入的NSError指针
  • 该方法返回一个布尔值

我可以推断出如何使用NSError指针,这是一个标准的目标C实践。但是我应该为布尔值返回什么值?错误时为TRUE,成功时为TRUE?相反?其他东西?我似乎找不到任何文档。

示例

像这样的接口:

  1. type A interface {
  2. DoThing(data *DataType) error
  3. }

字符串
Get是一个像这样的目标C接口:

  1. @interface PackageA : NSObject <goSeqRefInterface, PackageA> {
  2. }
  3. @property(strong, readonly) _Nonnull id _ref;
  4. - (nonnull instancetype)initWithRef:(_Nonnull id)ref;
  5. // Important bit is here:
  6. - (BOOL)doThing:(data* _Nullable)DataType error:(NSError* _Nullable* _Nullable)error;
  7. @end

k4ymrczo

k4ymrczo1#

在XNUMBER-C中,对于执行可能导致错误的操作的方法来说,返回一个指示成功或失败的布尔值with YES for success and NO for failure,并在必要时接受NSError ** parameter以提供错误详细信息是标准的。
将此应用于gomobilegobind生成的代码,您应该以相同的方式处理布尔返回值。
对于你的Go界面:

  1. type A interface {
  2. DoThing(data *DataType) error
  3. }

字符串
gomobile将生成一个类似于(如您所提到的)的X-C接口:

  1. @interface PackageA : NSObject
  2. - (BOOL)doThingWithData:(DataType *)data error:(NSError **)error;
  3. @end
  1. [ Go Interface ] [ Gomobile Binding ] [ Obj-C Interface ]
  2. A (DoThing) ---> gobind (error) ---> PackageA (doThing:error:)

那么,一个C-C方法将是:

  1. - (BOOL)doThingWithData:(DataType *)data error:(NSError **)error {
  2. BOOL success = your-operation(); // Attempt to do the thing
  3. if (!success) {
  4. // An error occurred, populate the error if it is not NULL
  5. if (error != NULL) {
  6. *error = [NSError errorWithDomain:@"YourErrorDomain"
  7. code:YourErrorCode
  8. userInfo:@{NSLocalizedDescriptionKey: @"An error occurred"}];
  9. }
  10. return NO; // Return NO to indicate failure
  11. }
  12. return YES; // Return YES to indicate success
  13. }


在此模式中,gomobile遵循与Apple的XNUMX-C方法相同的约定,即返回指示操作成功的布尔值,并带有可选的NSError以详细说明发生的任何错误。

展开查看全部

相关问题