例如,在下面的代码行中:

DispatchQueue.global(qos: .userInitiated).async { ... }

为什么.userInitiated以句点开头?这是从Objective C继承而来的还是Swift特有的?

最佳答案

注意:底部的 TLDR 版本
这称为Implicit member expression

因此,只要Swift知道类型,就可以经常忽略键入它,例如

let colour: UIColor = .red
它通常用于枚举值和静态类型,并且可以用于将参数传递给函数,例如上面的DispatchQueue示例。另一个简化的示例是:
enum Colors {
    case yellow, blue, red, green
}
因此,如果您具有此功能。
func draw(withColor: Colors) {

}
您应该可以使用.prefix来传递枚举,就像这样
draw(withColor: .yellow)
快捷方式更冗长的方式是:
draw(withColor: Colors.yellow)
解决方案
为了具体回答您的问题,此处的.userInitiated实际上是DispatchQoS的静态属性,因此它只是键入DispatchQoS.userInitiated的一种较短方法。 Swift可以在知道所需类型为DispatchQoS的情况下缩短它的时间

关于Swift编程语言,以句点开始属性是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38815075/

10-11 22:33
查看更多