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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2024-02-14 16:45:08
forward
1140 people have browsed it

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
}
Copy after login

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
Copy after login

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
}
Copy after login

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

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

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
}
Copy after login

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!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template