php小編西瓜今天為大家介紹一款名為”gomobile”的工具,它在iOS開發(fā)中提供了一種便捷的方式來(lái)處理錯(cuò)誤返回值。與傳統(tǒng)的方式不同,gomobile可以同時(shí)返回NSError對(duì)象和布爾值,讓開發(fā)者更加靈活地處理錯(cuò)誤情況。這個(gè)工具在開發(fā)過(guò)程中能夠極大地提高開發(fā)效率,減少錯(cuò)誤處理的復(fù)雜度。下面我們將詳細(xì)介紹gomobile的使用方法和優(yōu)勢(shì),希望對(duì)大家有所幫助。
問(wèn)題內(nèi)容
當(dāng)在 ios 上通過(guò) gomobile 使用 gobind 作為接口類型時(shí),golang 函數(shù)返回 error
會(huì)對(duì) objective c 中的類產(chǎn)生 2 個(gè)影響(示例如下):
包含傳入的 nserror 指針
該方法返回一個(gè)布爾值
我可以推斷如何使用 nserror 指針,這是標(biāo)準(zhǔn)的 objective c 實(shí)踐。但是我應(yīng)該為布爾值返回什么值? true 表示錯(cuò)誤,false 表示成功?相反?還有別的事嗎?我似乎無(wú)法在任何地方找到文檔。
示例
這樣的界面:
type a interface { dothing(data *datatype) error }
登錄后復(fù)制
獲取如下所示的目標(biāo) c 接口:
@interface PackageA : NSObject { } @property(strong, readonly) _Nonnull id _ref; - (nonnull instancetype)initWithRef:(_Nonnull id)ref; // Important bit is here: - (BOOL)doThing:(data* _Nullable)DataType error:(NSError* _Nullable* _Nullable)error; @end
登錄后復(fù)制
解決方法
在 objective-c 中,執(zhí)行可能導(dǎo)致錯(cuò)誤的操作的方法標(biāo)準(zhǔn)是返回指示成功或失敗的布爾值,使用 yes
表示成功,使用 no
表示失敗,并接受 nserror **
參數(shù)以提供錯(cuò)誤必要時(shí)詳細(xì)說(shuō)明。
將此應(yīng)用于 gomobile
和 gobind
,您應(yīng)該以相同的方式處理布爾返回值。
對(duì)于您的 go 界面:
type a interface { dothing(data *datatype) error }
登錄后復(fù)制
gomobile
將生成一個(gè) objective-c 接口,例如(正如您提到的):
@interface packagea : nsobject - (bool)dothingwithdata:(datatype *)data error:(nserror **)error; @end
登錄后復(fù)制
[ go interface ] [ gomobile binding ] [ obj-c interface ] a (dothing) ---> gobind (error) ---> packagea (dothing:error:)
登錄后復(fù)制
objective-c 方法將是:
- (BOOL)doThingWithData:(DataType *)data error:(NSError **)error { BOOL success = your-operation(); // Attempt to do the thing if (!success) { // An error occurred, populate the error if it is not NULL if (error != NULL) { *error = [NSError errorWithDomain:@"YourErrorDomain" code:YourErrorCode userInfo:@{NSLocalizedDescriptionKey: @"An error occurred"}]; } return NO; // Return NO to indicate failure } return YES; // Return YES to indicate success }
登錄后復(fù)制
在此模式中,gomobile
遵循與 apple 的 objective-c 方法相同的約定,即返回一個(gè)指示操作成功的布爾值,并使用可選的 nserror
來(lái)詳細(xì)說(shuō)明發(fā)生的任何錯(cuò)誤。