这应该很简单,但我无法自己弄清楚语法。
无法正确表达问题所以我无法谷歌答案。 (你可以通过关键词如目标c,属性,类来获得原因)
总之。在我的一个类中,我想保存一个引用另一个类的属性,而不是另一个类的实例。您可以使用此代码轻松完成:
@property (nonatomic, assign) Class anotherClass;
虽然,我不想使用通用Class
。我想使用自己的课程,但我无法弄清楚如何,我想我想做@property (nonatomic, assign) @class(MyOwnClass) myClass;
答案 0 :(得分:2)
Objective-C不允许基于堆栈的对象。我不认为你能做到这一点。您必须存储指向类实例的指针。 class is a method of NSObject, and returns a Class object, which is an instance of meta-class.这就是为什么它只适用于类,因为你要保存元类对象的实例。
答案 1 :(得分:2)
您可以使用协议来完成此操作。将您的Class属性声明为符合新协议的Class对象(甚至不需要方法),例如
@protocol MyProtocol
@end
@property (nonatomic, assign) Class<MyProtocol> anotherClass;
现在只需声明要在anotherClass上接受的所有基类中的MyProtocol一致性即可。
答案 2 :(得分:1)
如果值不是您要查找的类,则可以使用自定义setter引发NSInvalidArgumentException异常。您需要使用Class
。
由于Objective-C中的每个对象或类参数都是id
,因此无法引发编译错误,只需很好地记录代码即可。
答案 3 :(得分:0)
Objective-C没有类似模板或covariant/contravariant return types的内容。没有办法说“我想返回一个Class
对象,它表示一个类MyOwnClass
的类。”您必须使用通用Class
指针。
答案 4 :(得分:0)
也许我很困惑,但你不能这样做吗?
Temp.h
@interface Temp : NSObject
NSString *myString;
@end
@property(nonatomic,assign) NSString *myString;
Temp.m
#import "Temp.h"
@synthesize myString;
MyNewClass.h
#import "Temp.h"
@interface MyNewClass : NSObject
{
}
-(NSString) returnTemp;
@end
MyNewClass.m
#import "MyNewClass.h"
- (NSString) returnTemp
{
Temp *myTemp = [[Temp alloc] init];
[myTemp setMyString:@"hello"];
return myTemp;
}