Objective-C 的 @property 声明不允许您指定类级别的属性。例如,你不能这样做......
@interface NSObject (MyExtension)
+ @property (nonatomic, copy) NSString * className;
@end
...但我记得读过属性实际上只是获取/设置消息的语法糖,所以当您键入 something.foo 时,您实际上只是发送 [something foo] 或 [something setFoo:newFooVal] 消息。
于是我有了一个想法,就写了这个普通的班级成员……
@interface NSObject (MyExtension)
+ (NSString *) className;
@end
并在“m”文件中添加了这个(再次,完全正常)......
#import "IS_NSObject.h"
@implementation NSObject (MyExtension)
+ (NSString *) className
{
return NSStringFromClass([self class]);
}
@end
...果然,要获得任何类名的字符串表示,我现在可以这样做...
NSString * holderForClassName = UICollectionView.className;
瞧!一流的属性!甚至没有编译器警告!
实际上,唯一缺少的是代码完成/智能感知中的建议。但是如果你这样输入它当然会......
NSString * holderForClassName = [UICollectionView className];
所以当然,问题是......我基本上只是“发现”(即它一直在那里但它没有像这样使用)一个类级别的属性吗?
(好吧,好的,属性语法,但这就是我为了链接而不是嵌套大量括号而追求的。)