考虑以下一段快速代码
view1.autoPinEdge(.top, toEdge: .bottom, ofView: view2)
.top
,.bottom
发生了什么?
1)为什么这种看似模棱两可的方式允许指定变量?
2)swift如何处理有很多可能.top
和.bottom
的情况?
答案 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)