Home >Backend Development >Golang >gomobile: Error return value on iOS has both NSError and Boolean return value

gomobile: Error return value on iOS has both NSError and Boolean return value

WBOY
WBOYforward
2024-02-14 16:45:081133browse

gomobile:iOS 上的错误返回值同时具有 NSError 和布尔返回值

php Editor Xigua today introduces you to a tool called "gomobile", which provides a convenient way to handle error return values ​​in iOS development. Different from the traditional method, gomobile can return both NSError objects and Boolean values, allowing developers to handle error situations more flexibly. This tool can greatly improve development efficiency and reduce the complexity of error handling during the development process. Below we will introduce the usage and advantages of gomobile in detail, hoping to be helpful to everyone.

Question content

When using gobind as the interface type through gomobile on ios, the golang function returns error, which will have 2 effects on classes in objective c (example as follows):

  • Contains the passed nserror pointer
  • This method returns a Boolean value

I can infer how to use the nserror pointer, which is standard Objective C practice. But what value should I return for boolean? true means error, false means success? on the contrary? Anything else? I can't seem to find documentation anywhere.

Example

Such an interface:

type a interface {
  dothing(data *datatype) error
}

Get the objective c interface as shown below:

@interface PackageA : NSObject <goSeqRefInterface, PackageA> {
}
@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

Solution

In Objective-C, the standard way to perform an operation that may cause an error is to return a Boolean value indicating success or failure, Use yes for success, use no for failure , and accepts the nserror ** parameter to provide error details if necessary.

Apply this to gomobile and gobind, you should handle boolean return values ​​the same way.

For your go interface:

type a interface {
  dothing(data *datatype) error
}

gomobile will generate an objective-c interface such as (as you mentioned):

@interface packagea : nsobject
- (bool)dothingwithdata:(datatype *)data error:(nserror **)error;
@end
[ go interface ]          [ gomobile binding ]        [ obj-c interface ]
    a (dothing)   --->      gobind (error)     --->   packagea (dothing:error:)

objective-c method will be:

- (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
}

In this mode, gomobile follows the same convention as Apple's Objective-C approach, which is to return a boolean value indicating that the operation was successful, and use the optional nserror to Detail any errors that occurred.

The above is the detailed content of gomobile: Error return value on iOS has both NSError and Boolean return value. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete
Previous article:Unmarshalling asn failedNext article:Unmarshalling asn failed