Maison >développement back-end >Golang >gomobile : la valeur de retour d'erreur sur iOS a à la fois une valeur de retour NSError et booléenne

gomobile : la valeur de retour d'erreur sur iOS a à la fois une valeur de retour NSError et booléenne

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBavant
2024-02-14 16:45:081139parcourir

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

L'éditeur PHP Xigua vous présente aujourd'hui un outil appelé "gomobile", qui fournit un moyen pratique de gérer les valeurs de retour d'erreur dans le développement iOS. Différent de la méthode traditionnelle, gomobile peut renvoyer à la fois des objets NSError et des valeurs booléennes, permettant aux développeurs de gérer les situations d'erreur avec plus de flexibilité. Cet outil peut considérablement améliorer l'efficacité du développement et réduire la complexité de la gestion des erreurs pendant le processus de développement. Ci-dessous, nous présenterons en détail l’utilisation et les avantages de Gomobile, dans l’espoir d’être utile à tout le monde.

Contenu de la question

Lors de l'utilisation de gobind comme type d'interface via gomobile sur ios, la fonction golang renvoie error ce qui aura 2 effets sur la classe en objectif c (les exemples sont les suivants) :

  • Contient le pointeur d'erreur passé
  • Cette méthode renvoie une valeur booléenne

Je peux déduire comment utiliser le pointeur nserror, qui est une pratique standard en Objective C. Mais quelle valeur dois-je renvoyer pour un booléen ? vrai signifie erreur, faux signifie succès ? au contraire? Rien d'autre? Je n'arrive pas à trouver de documentation nulle part.

Exemple

Une interface comme celle-ci :

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

Obtenez l'interface Objective C comme indiqué ci-dessous :

@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 de contournement

En Objective-C, la manière standard d'effectuer une opération pouvant entraîner une erreur est de renvoyer un booléen indiquant le succès ou l'échec, en utilisant le yes 表示成功,使用 no 表示失败,并接受 nserror ** paramètre pour fournir les détails de l'erreur si nécessaire.

Appliquez ceci à gomobilegobind et gobind

et vous devriez vous retrouver avec le de la même manière pour gérer les valeurs de retour booléennes.

Pour votre interface Go :

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

générera une interface objective-c telle que (comme vous l'avez mentionné) :

@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:)
La méthode

objective-c serait :

- (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
}
gomobile 遵循与 apple 的 objective-c 方法相同的约定,即返回一个指示操作成功的布尔值,并使用可选的 nserrorDans ce mode,

suit la même convention que les méthodes Objective-C d'Apple, qui consiste à renvoyer un booléen indiquant le succès de l'opération et à utiliser le nserror facultatif pour détailler toutes les erreurs survenues. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer