我已经在stackoverflow和google中搜索了ans,但是没有得到我需要的东西。
我在寻找什么:
有没有办法为类的类属性设置默认值? 就像我们在Java中可以做的那样,在类的构造函数中,例如.-
MyClass(int a, String str){//constructor
this.a = a;
this.str = str;
// i am loking for similar way in obj-C as follows
this.x = a*5;
this.y = 'nothing';
}
我为什么要寻找:
我有一个大约有15个属性的课程。当我实例化类时,我必须使用一些默认值设置所有这些变量/属性。所以这使得我的代码变得繁重而复杂。如果我可以在该类中为这些实例变量设置一些默认值,那么必须减少此代码复杂性/冗余。
我需要你的帮助。
提前感谢您的帮助。
-Sadat
答案 0 :(得分:4)
如果您不想指定参数,
- (MyClass *)init {
if (self = [super init]) {
a = 4;
str = @"test";
}
return self;
}
然后当你MyClass *instance = [[MyClass alloc] init]
时,它会设置ivars的默认值。
但我不明白为什么你发布了带参数的构造函数,但你不想使用它们。
答案 1 :(得分:3)
编写 init,它正在执行完全初始化的所有工作。
然后根据需要编写尽可能多的具有不同参数集的启动器(但请考虑一下:你真的需要这个或那个一个吗?)。不,不要让他们做这个工作。让他们填写所有默认值(您没有提供给消息,此消息处理implementatino)并将其全部交给第一个。
第一个启动器称为指定启动器。 请务必不要错过Multiple Initializers and the Designated Initializer. 从不忽略指定的人!
问候
答案 2 :(得分:1)
在班级界面中:
@interface YourClass : NSObject {
NSInteger a;
NSInteger x;
NSString *str;
NSString *y;
}
- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString;
@end
然后,在实施中:
- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString {
if (self = [super init]) {
a = someInteger;
str = [someString copy];
x = a * 5;
y = [@"nothing" retain];
}
return self;
}
(NSInteger
是int
或long
的typedef,具体取决于架构。)