考虑以下快速代码
view1.autoPinEdge(.top, toEdge: .bottom, ofView: view2)
Run Code Online (Sandbox Code Playgroud)
什么是怎么回事.top,.bottom?
1)为什么允许使用这种看似模棱两可的方式指定变量?
2)如何迅速处理,其中有许多可能的情况.top和.bottom?
这只是使用枚举值的一种简写方式。
例如,使用函数...
func applyColour(_ colour: UIColor) {
// apply the colour
}
Run Code Online (Sandbox Code Playgroud)
可以使用以下语法调用
applyColour(UIColor.red)
Run Code Online (Sandbox Code Playgroud)
或者
applyColour(.red)
Run Code Online (Sandbox Code Playgroud)
因为编译器知道该函数需要一个UIColor参数。所以它可以暗示你使用时的类型.red
您还可以对静态函数和变量使用类型推断,如下所示:
extension String {
static var headerText {
return "This is the header"
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
headerLabel.text = .headerText
Run Code Online (Sandbox Code Playgroud)
或者:
let heading: String = .headerText
Run Code Online (Sandbox Code Playgroud)
该方法(最有可能)声明为
func autoPinEdge(_ from: UIRectEdge, toEdge: UIRectEdge, ofView: UIView)
Run Code Online (Sandbox Code Playgroud)
因此,编译器知道前两个参数的类型为UIRectEdge。
调用该方法的完整语法是
view1.autoPinEdge(UIRectEdge.top, toEdge: UIRectEdge.bottom, ofView: view2)
Run Code Online (Sandbox Code Playgroud)
但是编译器知道(文档说可以推断)类型,您只能传递成员
view1.autoPinEdge(.top, toEdge: .bottom, ofView: view2)
Run Code Online (Sandbox Code Playgroud)