Objective c 是否可以加上?“;键控订阅“;分类对象?

Objective c 是否可以加上?“;键控订阅“;分类对象?,objective-c,class,nsobject,metaclass,subscript,Objective C,Class,Nsobject,Metaclass,Subscript,以…的方式 @implementation MyClass - (id) objectForKeyedSubscript:(id)k { return [self something:k]; } 是否也可以“下标”类对象?我也将和你一起发现。。但是我想我会在测试的时候发布这个问题,我自己 + (id) objectForKeyedSubscript:(id)k { return [self.shared something:k]; } 唉。。这不是 id

以…的方式

@implementation MyClass
- (id) objectForKeyedSubscript:(id)k { 
       return [self something:k]; 
}
是否也可以“下标”
对象?我也将和你一起发现。。但是我想我会在测试的时候发布这个问题,我自己

+ (id) objectForKeyedSubscript:(id)k { 
       return [self.shared something:k]; 
}
唉。。这不是

id x = MyClass[@"document"];
错误:意外的接口名称“MyClass”:应为表达式

但是为什么呢,爸爸?
“如果你问我的话,一定要把
NSObject
的棍子弄短。

指出了问题:

您正在使用类型名称。在变量中使用类对象进行尝试<代码>id myClass=[myClass];myClass[@“文档”]
[MyClass类][@“文档”]

我发誓我已经试过了圣经。但证据就在布丁里

@interface MyClass : NSObject
@property (readonly) id  boring;
@end
@implementation MyClass
- boring   { return @"typical"; }
+ document { return  @"YEEHAW"; }
- objectForKeyedSubscript:key { return [self valueForKey:key]; }
+ objectForKeyedSubscript:key { 
  return [self performSelector:NSSelectorFromString(key)]; 
}
@end

或者是我的一句台词

x = ((id)MyClass.class)[@"document"] // "YEEHAW" 

如果您不想编写长代码
MyClass.shared[@“document”],我建议您在共享实例上创建全局指针您正在使用类型名称。在变量中使用类对象进行尝试<代码>id myClass=[myClass];myClass[@“文档”]
[MyClass][@“document”]
。好的,我刚刚理解了为什么您认为应该这样做——下标变成了消息发送,类名作为消息发送的接收者是有效的。不过,解析器只接受文本消息发送(或点语法)并不让我感到惊讶。@Cy-4AH我目前的方法通常是创建与您建议的大致相同的C函数<代码>id MyClassReaper(NSString*str){return objc_msgSend(MyClass.class,NSSelectorFromString(str));}等。。。同样,这些例子只是说明性的。+1对于穿插着简洁文字的幽默语言的问答。我相信你所说的
z
是指
b
,反之亦然。
x = ((id)MyClass.class)[@"document"] // "YEEHAW"