次のコードスニペットはblah3とblah4のみを出力し、blah2は出力しないのはなぜですか?NSMutableDictionary isKindOfClass NSDictionaryがfalseです
isKindOfClass
は継承を考慮していますが、正確には失敗しているようです。
のObj-C:
NSDictionary *dict = [NSDictionary new];
NSMutableDictionary *mutableDict = [NSMutableDictionary new];
if([dict isKindOfClass:[mutableDict class]]){
NSLog(@"blah"); //does not print (as expected)
}
if([mutableDict isKindOfClass:[dict class]]){
NSLog(@"blah2"); //does not print (unexpected!)
}
if([mutableDict isKindOfClass:[mutableDict class]]){
NSLog(@"blah3"); //prints
}
if([dict isKindOfClass:[dict class]]){
NSLog(@"blah4"); //prints
}
スウィフト:
var dict = NSDictionary()
var mutableDict = NSMutableDictionary()
if(dict.isKindOfClass(mutableDict.dynamicType)) {print("blah")}
if(mutableDict.isKindOfClass(dict.dynamicType)) {print("blah2")}
if(dict.isKindOfClass(dict.dynamicType)) {print("blah3")}
if(mutableDict.isKindOfClass(mutableDict.dynamicType)) {print("blah4")}
Xcodeの7.3.1、iOSの9.3を使用しました。
あなたの言いたいことはわかりません。 NSMutableDictionaryがNSDictionaryの場合、なぜblah2は印刷されませんか? – user1366911
あなたは 'dict.class'と比較しているからです。しかし、dictは 'NSDictionary'ではなく、そのサブクラスです。 – Eiko
私は2つのIDを持っているusecaseはどうですか?クラスが同じかサブクラスかどうかをチェックしたいのですが。その場合、私はisKindOfClassを使用する必要があります。私は[NSDictionaryクラス]と直接比較できません。これはisKindOfClassの目的ですか? – user1366911