objective-c - 为什么 {} 适用于 C 结构而不适用于属性

标签 objective-c syntax properties struct

前几天我遇到了一些通过使用花括号设置 C Structs 的值的东西,它工作得很好,但我想知道为什么我不能用它来设置属性的值?

//This works:
CGPoint pt = {10, 20};
CGRect rct = {0, 5, 50, 50};

//But this doesn't:
self.frame = {0, 5, 50, 50};
imageview.center = {100, 120};

编译器错误是“期望的表达式”

我想我知道为什么这不起作用,但我想要更彻底的解释。

最佳答案

第一行结合了变量的声明和初始化。编译器根据左侧表达式的类型推断右侧表达式的类型,并按预期在结构槽中分配数字。

然而,最后几行不是初始化。现在编译器不会推断任何东西。结果,编译器不知道应该如何解释右边的内容。它的类型是什么,如何在内存中布局这些数字?编译器不会假定它的 CGrect 或 CGPoint,您必须帮助他进行显式转换 (CGRect){0,5,50,50},这会为他提供缺失的信息。

关于objective-c - 为什么 {} 适用于 C 结构而不适用于属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767371/

相关文章:

ios - 在不延迟当前操作的情况下触发 NSNotification

ios - 如何在 iOS Objective C 中检索数组前的借口(解析)

ios - 如何立即知道内容已显示在 iOS 的 WebView 中

java - 为什么我可以存储实现接口(interface) "in"该接口(interface)的类的实例而不丢失信息?

objective-c - Objective-C 类中的指针、原语和属性

java - 从tomcat读取属性

ios - 如果我要创建完全自定义的 getter 和 setter 方法,我还需要 @property 声明吗?

objective-c - 保护开关中的外壳

python - 可选的结束符号和使用正则表达式捕获的几个单词

c++ - 使用 'delete' 时出现语法错误