【发布时间】:2019-07-09 12:47:37
【问题描述】:
switch-case 语句通常是这样工作的:如果条件与值完全匹配,则执行相应的代码块。但就我而言,出了点问题!为什么条件是“日期”时“更新”的代码对我有用!?我试图重现操场上的情况——那里一切正常。有什么问题?
为什么update 块在key = "date" 时起作用?从理论上讲,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 空视图控制器中添加代码。控制台仍显示key = date。我只在我的项目中看到问题。我尝试在新项目和游乐场中添加代码 - 一切正常(default = date 输出到控制台)。怎么会这样?我尝试了不同的模拟器(和 iOS 版本) - 问题仍然存在。我还尝试清理项目 - 问题仍然存在。也许在项目的某个地方重新定义了 switch 语句的工作 - 这可能吗?
【问题讨论】:
-
编译自包含的示例会很有帮助。
-
@martin-r 问题是在独立示例中,我没有观察到这样的问题。一切正常。
-
你是如何定义
BaseDatabase.COLUMN_ID、WeddingDatabase.COLUMN_PREMIUM和BaseDatabase.COLUMN_UPDATE_CLEAN的? -
@TheTiger 采用以下方式:
static let COLUMN_ID = "_id"、static let COLUMN_PREMIUM = "premium"和private static let COLUMN_UPDATE_CLEAN = "update" -
有几件事:首先,您的更新 2 包含非标准语法(可能依赖于您项目中的其他扩展)。我建议你总是让你的例子尽可能简单。例如。
static func ~= (lhs: String, rhs: String) -> Bool { return lhs.contains(rhs) }也体现了这个问题。其次,你不应该在你的问题中加入答案,而是post your own answer to your question。我认为这是您发现的真正宝石,但您让别人很难为您的问题投票,更不用说您的答案了。