簡體   English   中英

Swift中的奇怪行為切換案例語句

[英]Strange behavior switch-case statement in Swift

通常,switch-case語句的工作方式如下:如果條件與值完全匹配,則執行相應的代碼塊。 但就我而言,出了點問題! 為什么條件為“ date”時,為什么“ update”代碼對我有用!? 我試圖重現操場上的情況-那里的一切正常。 問題是什么?

為什么key = "date"update塊起作用? 從理論上講, default塊應該起作用!

我的代碼:

print("Dictionary = \(dictionary)")

for (key, value) in dictionary {
    switch key {
    case BaseDatabase.COLUMN_ID:
        // My code
    case WeddingDatabase.COLUMN_PREMIUM:
        // My code
    case BaseDatabase.COLUMN_UPDATE_CLEAN:
        print("type = \(BaseDatabase.COLUMN_UPDATE_CLEAN), key = \(key)")
        // My code
    default:
        // My default code
    }
}

我的控制台:

dictionary = ["note": <null>, "date": 2024-08-08 00:00:00, "update": 2019-07-09 08:57:05, "id_wedding": 1]

type = update, key = date // WHY??
type = update, key = update 

更新:

削減代碼到平凡:

let key = "date"
switch key {
    case "update":
        print("key = \(key)")
    break
    default:
        print("default = \(key)")
    break
}  

viewDidLoad空的viewController中添加了代碼。 控制台仍顯示key = date 我僅在我的項目中看到問題。 我試圖在新項目和playgroud中添加代碼-一切正常( default = date輸出到控制台)。 怎么會這樣? 我嘗試了不同的模擬器(和iOS版本)-問題仍然存在。 我也嘗試清理項目-問題仍然存在。 也許在項目中的某處重新定義了switch語句的工作-這可能嗎?

我發現了一個問題。 在String類擴展中,〜=運算符的重新定義如下:

extension String {
    static func ~= (lhs: String, rhs: String) -> Bool {
        return NSRegularExpression(rhs).matches(lhs)
    }
}

事實證明, ~=運算符用於switch語句中。 要更正錯誤,我用以下內容替換了此擴展名:

extension String {
    func matches(pattern: String) -> Bool {
        return NSRegularExpression(pattern).matches(self)
    }
}

我如何使用它:

if value.matches(pattern: "#[0-9]{1,2}[A-Z]#" {
    // Code
}

重新定義操作員時,應格外注意!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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