作爲夫特4,故事板標識符是可選NSStoryboardSegue.Identifier
,其被定義爲
extension NSStoryboardSegue {
public struct Identifier : RawRepresentable, Equatable, Hashable {
public init(_ rawValue: String)
public init(rawValue: String)
}
}
可以在其rawValue
切換:
switch segue.identifier?.rawValue {
case "showVC1"?:
// do something ...
default:
break
}
的推薦圖案然而是定義每個 故事板標識符的常量:
extension NSStoryboardSegue.Identifier {
static let showVC1 = NSStoryboardSegue.Identifier("showVC1")
// other storyboard identifiers ...
}
其然後可以進行匹配:
switch segue.identifier {
case .showVC1?:
// do something ...
default:
break
}
在這兩個例子中,「任選的圖案」 x?
(對於.some(x)
快捷方式) 被用於匹配一個可選值。
爲其他「標識符」引入了類似的類型,例如, NSImage.Name
,這是NSImage(named:)
斯威夫特4
參數的類型有關更多信息,請參閱討論迅速用戶郵件 表,從
一般的想法(據我所知)是爲每種標識符創建單獨的類型 。特別是(從https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20170717/005940.html):
......我們故意不鼓勵名稱的字符串文字。字符串文字應該只在一個地方:名稱常量的定義。其他一切都應該使用常量。編譯器可以提供常量的自動完成和拼寫檢測。字符串文字沒有得到。
@MartinR我還沒有訪問Swift 4,從規範回答。我刪除了提示'=='可能的部分答案。在一個不相干的筆記中,我真的很驚訝蘋果公司在這方面做了一個突破性的改變:我想不出將'標識符'從'String'改爲它自己的類型所帶來的好處。感謝您的評論! – dasblinkenlight
對其他「標識符字符串」做了類似的修改,例如'NSImage(named:NSImage.Name)'。如果我沒有記錯的話,那是在Swift郵件列表中討論的(有爭議的)。我會盡量在稍後找到一些參考資料,列表檔案目前處於離線狀態。我感到奇怪的是,這種改變並沒有通過提案流程,至少我不記得這一點。 –
我找到了參考資料,請參閱下面的更新答案。 –