为什么我会看到一些与前导点一起使用的变量?

时间:2018-01-24 08:41:28

标签: swift

考虑以下一段快速代码

view1.autoPinEdge(.top, toEdge: .bottom, ofView: view2)

.top.bottom发生了什么?

1)为什么这种看似模棱两可的方式允许指定变量?
2)swift如何处理有很多可能.top.bottom的情况?

2 个答案:

答案 0 :(得分:4)

这只是使用枚举值的简便方法。

例如,使用函数...

func applyColour(_ colour: UIColor) {
   // apply the colour
}

可以使用以下语法

进行调用
applyColour(UIColor.red)

applyColour(.red)

因为编译器知道该函数需要UIColor参数。因此,当您使用.red

时,它可能意味着类型

你也可以使用带有静态函数和变量的类型推断:

extension String {
   static var headerText {
        return "This is the header"
   }
}

用法:

headerLabel.text = .headerText

或:

let heading: String = .headerText

答案 1 :(得分:2)

该方法(很可能)声明为

func autoPinEdge(_ from: UIRectEdge, toEdge: UIRectEdge, ofView: UIView)

所以编译器知道前两个参数的类型是UIRectEdge

调用该方法的完整语法是

view1.autoPinEdge(UIRectEdge.top, toEdge: UIRectEdge.bottom, ofView: view2)

但正如编译器所知(文档说可以推断),您只能传递成员的类型

view1.autoPinEdge(.top, toEdge: .bottom, ofView: view2)