Maison  >  Questions et réponses  >  le corps du texte

objective-c如何实现java中的反射机制

在开发iOS app时,经常会遇到服务端返回数据不完整的情况,比如缺少key,或者value为null的情况。

java中可以定义一个类,用反射的机制来进行数据初始化。

而objective-c中只能用nil和[NSNull null]来单独判断。来避免app crash。

整个view层也变得不够纯粹。

补充:
我现在的做法是。如果返回的是一个数组。数组中每一项又是一个对象。我们假设对象中有的key或者value是缺失的。那么就要遍历一边,逐个遇到不完整的情况追加key或者默认值。这样,在view层中,就不用再对key或value去做判断了。代码也专注在业务逻辑上。

问:
有没有更好的。更优雅的方式来实现。

PHPzPHPz2761 Il y a quelques jours574

répondre à tous(3)je répondrai

  • PHP中文网

    PHP中文网2017-04-21 10:59:18

    Je ne comprends pas très bien ce que tu veux dire. . . La réflexion de Java peut obtenir dynamiquement la méthode et la liste d'attributs d'une instance. Pour cette fonction, Obj-c peut utiliser la méthoderespondsToSelector: de NSObject pour confirmer si une instance a une certaine méthode ; Fondamentalement, cela peut remplacer la réflexion de Java.
    En ce qui concerne le problème de juger la valeur de retour vide, je n'ai vraiment pas de bon moyen pour le moment. Je définis généralement une méthode et juge containObject:, nil, [NSNull null], length ou count dans l'ordre. Cette méthode peut être écrite dans un utilitaire ou peut être étendue et écrite dans NSDictionary et NSArray.

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-21 10:59:18

    Le mécanisme KVC d'Objc est similaire à la réflexion de Java. Il suffit de le chercher sur Google

    Par exemple
    @interface A : NSObject{
    NSString * nom ;
    >

    Vous pouvez l'obtenir comme ça

    A *a = [[A alloc] init];

    NSString *name = [a objectForKey:@"name"];

    Je ne sais pas si tu veux faire ça

    Vous implémentez l'interface nscoding. - (id)initWithCoder :(NSCoder *)aDecoder peut faire ce que vous voulez. Je ne sais pas si je comprends bien.

    répondre
    0
  • 高洛峰

    高洛峰2017-04-21 10:59:18

    • OC dispose d'un framework open source de JSONModel, qui peut convertir Json en ViewModel
    • Le problème de la valeur nulle peut être déterminé lorsque la couche View est utilisée ou la valeur par défaut peut être définie lorsque le ViewModel est construit

    • Concernant la réflexion OC, vous pouvez utiliser NSClassFromString, NSSelectorFromString et d'autres méthodes

    répondre
    0
  • Annulerrépondre