在开发iOS app时,经常会遇到服务端返回数据不完整的情况,比如缺少key,或者value为null的情况。
java中可以定义一个类,用反射的机制来进行数据初始化。
而objective-c中只能用nil和[NSNull null]来单独判断。来避免app crash。
整个view层也变得不够纯粹。
补充:
我现在的做法是。如果返回的是一个数组。数组中每一项又是一个对象。我们假设对象中有的key或者value是缺失的。那么就要遍历一边,逐个遇到不完整的情况追加key或者默认值。这样,在view层中,就不用再对key或value去做判断了。代码也专注在业务逻辑上。
问:
有没有更好的。更优雅的方式来实现。
무슨 말씀인지 잘 모르겠습니다. . . Java의 리플렉션은 인스턴스의 메서드와 속성 목록을 동적으로 얻을 수 있습니다. 이 함수의 경우 Obj-c는 인스턴스에 특정 메서드가 있는지 확인하기 위해 PerformSelector: 메서드를 사용할 수도 있습니다. 기본적으로 이는 Java의 리플렉션을 대체할 수 있습니다.
빈 반환 값을 판단하는 문제에 관해서는 현재로서는 좋은 방법이 없습니다. 보통 메서드를 정의하고 containObject:, nil, [NSNull null], length 또는 count를 순차적으로 판단합니다. 이 메서드는 util로 작성하거나 NSDictionary 및 NSArray로 작성하도록 확장할 수 있습니다.
Objc의 KVC 메커니즘은 Java의 리플렉션과 유사합니다. 구글링해 보세요
예를 들어
@인터페이스 A : NSObject{
NSString * 이름;
}
이렇게 얻으시면 됩니다
A *a = [[A 할당] 초기화];
NSString *name = [a objectForKey:@"name"];
이런 일을 하고 싶은지 모르겠어요
nscoding 인터페이스를 구현합니다. - (id)initWithCoder:(NSCoder *)aDecoder는 원하는 것을 할 수 있습니다. 제가 제대로 이해한 것인지 모르겠습니다.
null 값 문제는 View 레이어를 사용할 때 판단하거나 ViewModel 구성 시 기본값을 설정할 수 있습니다
OC 반영과 관련하여 NSClassFromString, NSSelectorFromString 및 기타 방법을 사용할 수 있습니다