[英]How do I modify an 'Any' variable by first checking for its type?
我正在將統計信息收集到字典中:
var metrics = [String:Any]
這些指標可以是Ints,Doubles,Strings,因此我嘗試使用Any。
我這樣初始化一個指標:
metrics["sentBeacons"] = UInt(0)
但是現在,如果我嘗試對其進行修改,則編譯器將引發錯誤:
metrics["sentBeacons"]! += 1 // Error: can't apply Int to Any?
據我了解,它不知道那個鍵有一個Int。
我試過了:
if metrics["sentBeacons"] is UInt {
metrics["sentBeacons"]! += 1
}
但是沒有骰子。 我也嘗試過類型轉換:
if var sentBeacons = metrics["sentBeacons"] as? UInt {
sentBeacons += 1
}
但這也不起作用,因為(我認為)Dictionary是一種值類型,並且我僅訪問變量的副本。
我怎么能問編譯器:“如果這個'Any'現在是一個Int,那么在它的原位加上'1'”?
您可以使用新的計算值更新字典:
if var sentBeacons = metrics["sentBeacons"] as? UInt {
sentBeacons += 1
metrics["sentBeacons"] = sentBeacons
}
我為此做了一個擴展,以便在處理字典時封裝讀/修改/寫步驟:
extension Dictionary {
func transformValue(forKey key: Key, valueTransformer: (oldValue: Value?) -> Value) -> Dictionary {
var copy = self
copy[key] = valueTransformer(oldValue: self[key])
return copy
}
}
metricts.transformValue(forKey: "sentBeacons"){UInt($0!) + 1}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.