我一直试图绕过readonly属性,我可以对我写的一些代码进行一些澄清。我的标题中有一个@property (nonatomic, readonly) BOOL test;
,我在我的.m
-(BOOL)test{
test = (a == b) && (b < c);
return test;
}
if (self.test) {
NSLog(@"a is less than c");
}
else {
NSLog(@"a is equal or greater than c")
}
所以基于此我有几个问题。当我编译它时,它已经知道test
是对的?我不必在[self test]
或viewDidLoad
权限中写init
?为什么在if
语句中它必须是self.test
而不仅仅是测试。在测试方法中我可以返回更多然后只是测试吗?我可以返回测试,然后在下面写下它返回test1
然后返回test 2
如果它们都是BOOL的那么?
答案 0 :(得分:0)
-(BOOL)test{
test = (a == b) && (b < c);
return test;
}
在这种情况下,test
只是一个局部变量,用于保存您正在计算的值。它不是在函数之外使用的,它的名称并不重要。您可以在方法中将test
替换为foo
,它仍然有效。
if (self.test) {
NSLog(@"a is less than c");
}
else {
NSLog(@"a is equal or greater than c")
}
在这种情况下,您正在调用self.test
,因为test
不是类中的变量,它是一个属性,其值由方法返回。这就是为什么你打电话给财产而不只是test
,因为没有test
变量,只是一个属性。
答案 1 :(得分:0)
当我编译它时,它已经知道什么测试是正确的?
好吧,编译器会知道你声明了一个属性test
。
我不必在viewDidLoad或init中写[self test]吗?
没有
为什么在if语句中它必须是self.test而不仅仅是test?
这是因为你声明了一个属性test
。要访问底层的ivar _test
,您必须使用它的访问器,或直接访问_test
,假设您已经合成它,或者您正在使用能够自动合成的Xcode版本。
在测试方法中我可以返回更多然后只是测试吗?
您可以在test
的getter方法中返回您喜欢的任何内容。当然,按照惯例,你会返回属性的支持ivar。
就像我可以返回测试然后在它下面写[sic]返回test1然后如果它们都是BOOL那么返回测试2?
不,getter方法需要返回与声明的属性相同的类型。
我认为你应该阅读声明的属性,如何使用它们以及它们与实例变量的关系。