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"