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

Ala*_*ACK 0 swift

考虑以下快速代码

view1.autoPinEdge(.top, toEdge: .bottom, ofView: view2)
Run Code Online (Sandbox Code Playgroud)

什么是怎么回事.top.bottom

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

Scr*_*ble 7

这只是使用枚举值的一种简写方式。

例如,使用函数...

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)

  • 感谢您的答复。它比“这是编译器的工作”更有帮助 (2认同)

vad*_*ian 5

该方法(最有可能)声明为

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)