可選鏈接我有一個let map : [String: String]
和let key: String?
。斯威夫特:可選標
什麼是訪問map[key]
(並取回一個String?
如果我有一個key
和None
如果我沒有)最簡潔的方式?
可選鏈接我有一個let map : [String: String]
和let key: String?
。斯威夫特:可選標
什麼是訪問map[key]
(並取回一個String?
如果我有一個key
和None
如果我沒有)最簡潔的方式?
let value = key.flatMap { map[$0] }
會向特技
,使用從所述struct Optional
/// Returns `nil` if `self` is nil, `f(self!)` otherwise.
@warn_unused_result
public func flatMap<U>(@noescape f: (Wrapped) throws -> U?) rethrows -> U?
方法。
或者,你可以換行到自定義標方法
extension Dictionary {
subscript(optKey : Key?) -> Value? {
return optKey.flatMap { self[$0] }
}
}
和簡單的寫
let value = map[key]
爲了避免與「正常」的標法混亂,使 意向更清楚你的代碼的閱讀器,可以與外部參數名稱定義 標方法:
extension Dictionary {
subscript(optional optKey : Key?) -> Value? {
return optKey.flatMap { self[$0] }
}
}
let value = map[optional: key]
這個答案是越來越好:-)什麼是擴展的範圍有多大?我可以將其放到需要它的類,它不會對項目的其餘任何副作用? – Thilo
@Thilo:分機不能「內部」一類的定義。您可以(據我所知)只使用[訪問控制(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html)的水平,例如, 'private subscript ...'將範圍限制爲定義的源文件。 –