gpt4 book ai didi

swift - 在 Swift 中检查是否为 "dictionary item exists and is not blank"的紧凑方法?

转载 作者:可可西里 更新时间:2023-11-01 02:18:18 25 4
gpt4 key购买 nike

我正在解析一个 1970 年代的文本文件(最初来自 CDC 6600),其中包含参数数量可变的行。这是一些示例...

GW 1 5 0.0000 -1.0000 0.0000000 0.00000 1.0000 0.000 .00667
GE 1
FR 0 0 0 0 46.29 0.

我正在使用 split(是的,最终在 Xcode 7 中修复了!)将其分解为一个数组,然后将非零值插入字典中,就像这样......

let parts: [String] = original!.characters.split{ $0 == " " || $0 == "," }.map{ String($0).trim() }
if parts.count > 1 { data["I1"] = parts[1] }
if parts.count > 2 { data["I2"] = parts[2] }
if parts.count > 3 { data["F1"] = parts[3] }

最后,我对输入进行了全面检查,因为我见过很多不正确文件的例子。所以我有一系列这样的功能......

func checkGA() {
if (data["I1"] == "" || data["I2"] == "" || data["F1"] == "" || data["F2"] == "" || data["F3"] == "" || data["F4"] == "") { problem = "Missing parameters." }
if (data["F5"] != "" || data["F6"] != "" || data["F7"] != "") { problem = "Extra paramters after F4." }
}

我觉得在 Swift 中检查这些输入可能有一种不那么丑陋的方法。我在想也许我可以在 map 或类似的地方使用范围运算符?类似的东西:

if (data["F2"..."F4"] != "") ...

但是这种函数式编程对我来说是非常非常新的。有没有大师有什么建议?

最佳答案

您可以考虑使用错误处理:

enum FieldError : ErrorType {
case MissingField(String)
case ExtraField(String,String)
}

do {
// sample data
let data = ["I1": "hello", "I2": "world", "F1":"Greetings" ]

try ["I1", "I2", "F1"].forEach { key in
guard let value = data[key] where value != "" else {
throw FieldError.MissingField(key)
}
}

try ["F5", "F6", "F7", "F8"].forEach { key in
if let value = data[key] where value != "" {
throw FieldError.ExtraField(key, value)
}
}

print("All data tests passed")
}
catch FieldError.MissingField(let key) {
print("Missing field for key: \(key)")
}
catch let FieldError.ExtraField(key, value) {
print("Extra field with key: \(key), value: \(value)")
}

关于swift - 在 Swift 中检查是否为 "dictionary item exists and is not blank"的紧凑方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com