为什么UIButton.layer.maskedCorners接受分配显式数组而不是数组变量?

时间:2018-08-03 11:52:03

标签: ios swift

在Swift中为什么这样做有效?

let button = UIButton()
button.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMinXMinYCorner]

这不是吗?

let corners : [CACornerMask] = [.layerMinXMaxYCorner, .layerMinXMinYCorner]
let button = UIButton()
button.layer.maskedCorners = corners

I.E。明确地为maskedCorners分配数组是好的,但不能给数组变量赋值。

错误是:

  

无法将类型“ [CACornerMask]”的值分配给类型“ CACornerMask”   button.layer.maskedCorners =角点

2 个答案:

答案 0 :(得分:2)

您的corners常量类型错误。 [CACornerMask]使其为CACornerMask的数组。您希望输入CACornerMask。声明为NS_OPTIONS类型,该类型将映射到Swift选项集。

代码[.layerMinXMaxYCorner, .layerMinXMinYCorner]看起来像数组语法,但不是。它是语义糖,可以让您在C标志变量中指定不同的位掩码(这是Swift选项集所映射到的变量)。

引用Apple的文档:“ Swift还将导入标有NS_OPTIONS宏的C枚举作为Swift选项集”

摘录自:苹果公司。“将Swift与Cocoa和Objective-C结合使用(Swift 4 beta)。” iBooks。

答案 1 :(得分:0)

您应该尝试

let corners : CACornerMask = [.layerMinXMaxYCorner, .layerMinXMinYCorner]
let button = UIButton()
button.layer.maskedCorners = corners

您将错误的类型分配给所需的类型