簡體   English   中英

如何通過首先檢查“ Any”變量的類型來對其進行修改?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM