2

我想在我的自定义类中实现下标,因此实现了以下方法:

- (id)objectForKeyedSubscript:(id<NSCopying>)key;
- (void)setObject:(id)obj forKeyedSubscript:(id<NSCopying>)key;

但我有一个奇怪的问题,因为我以前从未遇到过:[(id)obj isKindOfClass:]抛出一个 ARC Semantic Issue:

No known instance method for selector 'isKindOfClass:'

据我记得,我之前没有任何问题id......这是Xcode的一个错误(我使用的是Xcode 5 Developer Preview 2),还是我忘记了一些重要的事情?

- (id)objectForKeyedSubscript:(id<NSCopying>)key {
    if(![key isKindOfClass:[NSString class]]) { // error
        ...
    } else {
        ...
    }
}
4

1 回答 1

6

isKindOfClass:NSObject 协议的一种方法,因此您可以声明key为符合协议

- (id)objectForKeyedSubscript:(id <NSCopying, NSObject> )key { ...

或需要key派生自NSObject(符合该协议):

- (id)objectForKeyedSubscript:(NSObject <NSCopying> *)key { ...
于 2013-07-02T20:56:29.493 回答