3

不明なタイプのオブジェクトを受け取るコードがあります。、 、または他のクラスにラップされたスカラーであるNSString可能性があります。NSNumberNSValue

-(void) doSomethingWith:(id) value {
    if ( <test-for-NSValue> ) { 
        // Do something with a NSValue
    } else {
        // Do something else
    }
}

NSValue 内のどこにスカラー型があるかを特定する必要があります。

問題は、NSValue でラップされたスカラーと NSNumber を識別することです。NSNumber は NSValue から継承され、どちらもクラス クラスターであるため、それらを整理するのに苦労しています。

そう:

[value isKindOfClass:[NSValue class]]... NSNumbers を NSValues と見なします。

[value isMemberOfClass:[NSValue class]]... インスタンスは具体的なサブタイプであるため、NSValues を認識しません。

誰でもこれを行う方法を知っていますか?

4

2 に答える 2

1

どうですか:

-(void) doSomethingWith:(id) value {
    if ([value isKindOfClass:[NSValue class]] && ![value isKindOfClass:[NSNumber class]]) {
       // NSValue but not instance of NSNumber
    } else {
       ...
    }
}
于 2016-09-13T13:34:23.467 に答える