需要解释奇怪的语法

Evg*_*ban 5 objective-c compound-literals ios

我按照教程找到这段代码:

self.imageView.frame = (CGRect){.origin = CGPointMake(0.0f, 0.0f), .size = image.size};
Run Code Online (Sandbox Code Playgroud)

它非常清楚它做了什么,但我不理解这行代码的语法.我第一次看到这样的事情:.size = image.size.在点语法中我希望看到点前面的东西self.view,但是,这是什么意思.size

第二个问题是 - 为什么有圆括号,后面是大括号?我之前从未见过这样的结构(){};.

我的问题可能听起来很傻,但现在我有点困惑,有人可以提供解释吗?谢谢.

Zev*_*erg 5

这是C结构的指定初始化程序语法.括号()用于将结构转换为a CGRect.正如Martin R指出的那样,除非你使用复合文字语法,否则不需要强制转换,因为你没有为参数命名.

  • `CGRect frame = {.origin = ...,.size = ...}`将是一个指定的初始化器(你不需要演员).`self.imageView.frame =(CGRect){...}`是一个分配,其中rhs是*复合文字*(并且需要强制转换). (3认同)
  • @MartinR:除非我错了,`{.origin = ...}`是指定的初始化语法,`(CGRect){}`是复合文字语法.所以这两者都是. (3认同)