我有一個在 Swift 中宣告關聯值的列舉,以及一??個試圖在該條目中的特定位置獲取值的方法:
enum myEnum {
case entry0(Float=0.0, Float=0.0)
...
}
var entry0XValue: Float {
switch self {
case .entry0(let x, let _):
return x
default:
return 0
}
}
代碼有效,但我在這里遇到的問題是當我編譯它時,編譯器給出了這個警告:
'let' pattern has no effect; sub-pattern didn't bind any variables
這是指大小寫切換中的下劃線。有什么辦法可以重寫它以消除此警告?
uj5u.com熱心網友回復:
像這樣拼寫
case .entry0(let x, _):
或者喜歡
case let .entry0(x, _):
更普遍的作業方式是:
case let .entry0(x, y):
uj5u.com熱心網友回復:
模式的效果是,當模式匹配時let <subpattern>,它將值系結到出現在 中的識別符號模式。<subpattern>例如,當你在 switch 陳述句中匹配它時, xin系結到 0.0。另一個例子:當你做 時,and分別系結到and 。請注意,在這種情況下,是一個元組模式,其中包含識別符號模式。.entry0(let x, let _)MyEnum.entry0(0.0, 0.0)let (x, y) = (1, 2)xy12<subpattern>
該let模式let _“無效”,因為在<subpattern>(通配符模式_,在本例中)中沒有識別符號模式。結果,let當且僅當匹配時,模式才會<subpattern>匹配,這意味著您根本不需要let。你可以直接寫<subpattern>。
case .entry0(let x, _):
這將洗掉警告。
由于該.entry(...)部分也是一個模式(列舉案例模式),您可以將該部分寫為<subpattern>:
case let .entry0(x, _):
有關模式語法的更多資訊,請參閱語言參考的模式部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468561.html
標籤:迅速
