几天前,我将旧的 Xcode 8 项目转换为 Xcode 9 中的 Swift 4。 我注意到生成了额外的 Swift 代码以及代码上方的解释。
这是它的样子:
// FIXME: comparison operators with optionals were removed from the Swift Standard Libary.
// Consider refactoring the code to use the non-optional operators.
fileprivate func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
switch (lhs, rhs) {
case let (l?, r?):
return l < r
case (nil, _?):
return true
default:
return false
}
}
我试图理解代码的作用,并在代码中找到我认为有点不寻常的_?
。
我猜它是未使用的可选的,因为 _
意味着我们不会使用特定的变量,所以我们不关心变量的名称,而 ?
是可选的语法.
感谢您的帮助!
最佳答案
_
是匹配任何内容的通配符模式,参见示例
而x?
是可选模式,是.some(x)
的快捷方式,它匹配
不是 nil
的可选值。
这里我们有两者的组合:_?
匹配任何是
不是 nil
。
case (nil, _?)
如果左操作数为 nil
则匹配
而正确的操作数不是。您也可以将其写成 case (.none, .some)
。
Xcode 可以在从旧的 Swift 版本迁移的过程中插入这个函数, 比较 Strange generic function appear in view controller after converting to swift 3 .
关于swift - `_?` 在 Swift 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53079027/