Maison > développement back-end > Golang > le corps du texte

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

WBOY
Libérer: 2024-02-14 16:45:08
avant
1100 Les gens l'ont consulté

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
}
Copier après la connexion

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
Copier après la connexion

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
}
Copier après la connexion
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
Copier après la connexion
[ go interface ]          [ gomobile binding ]        [ obj-c interface ]
    a (dothing)   --->      gobind (error)     --->   packagea (dothing:error:)
Copier après la connexion
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
}
Copier après la connexion
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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal