我正在学习objective-c,作为我学习的一部分,我试图在我看到的地方转换点符号,回到括号表示法(我现在更喜欢括号表示法)
所以我目前对世界的看法是:
在我正在阅读的一本书中,我遇到了以下代码,并且在我的前几次尝试中,我很难将其转换为括号表示法。
...
CGRect switchViewFrame = switchView.frame;
switchViewFrame.origin.y += [UIApplication sharedApplication].statusBarFrame.size.height;
挖得更深,我得出以下结论......
switchViewFrame.origin.y无法转换为括号表示法,因为switchViewFrame被定义为CGRect,它是Apple文档中的结构,因此点符号是必要的吗?
第二行的右值是括号和点的组合,因为shareApplication是UIApplication的类方法,因此会发送消息,但statusBarFrame被定义为CGRect的属性,即结构,因此点需要表示法吗?
非常感谢任何澄清这些观点的帮助。
如果我完全被误解了,你实际上可以把它转换为括号表示法,你能否解释一下原因。
由于
答案 0 :(得分:1)
1)2.0之前的Objective-c只有结构的点符号? 是的,据我所知。
2)Objective-c 2.0引入了属性的点符号。这允许通过点表示法访问setter / getters? 是强>
3)消息无法发送到结构? 正确,发送消息相当于调用消息发送到的对象中的方法。
4)switchViewFrame.origin.y
无法转换为括号表示法,因为switchViewFrame
被定义为CGRect
,这是苹果文档中的struct
,因此点符号是必要的吗? 是强>
5)第二行的rvalue
是括号和点的组合,因为shareApplication
是UIApplication
的类方法,因此会发送一条消息,但statusBarFrame
是定义为CGRect
的属性,即struct
因此需要点符号? 否:statusBarFrame
是UIApplication
对象的属性。但statusBarFrame
是struct
,其成分origin
和size
也是structs
。
所以你几乎无处不在。
答案 1 :(得分:0)
https://stackoverflow.com/a/10444012/2449268
解释得非常好,希望它能回答你的问题。
您也可以在框架上使用括号表示法如下:
CGRect switchViewFrame = switchView.frame; switchViewFrame.origin.y + = [[UIApplication sharedApplication] statusBarFrame] .size.height;