所以我从 url 获取这个字符串: 开始:VCAMERA 方法:发布 开始:活动
最后我想要一本字典,例如 ["BEGIN": "VCAMERA"]。 这是我当前的实现 -
let string = try String(contentsOf: url, encoding: .utf8)
let wordArray = string.components(separatedBy: CharacterSet.newlines)
var dict = [String: String]()
for keyValue in wordArray {
let components = keyValue.components(separatedBy: ":")
if components.count > 1 {
dict[components[0]] = components.last?.trimmingCharacters(in: .whitespacesAndNewlines)
}
}
这段代码给出了所需的输出,但我想知道是否有更干净、更好的方法。`
从你的问题中不清楚你想如何处理重复项,但你的代码只是覆盖它们。如果是这样,这是一种更紧凑的方法,与您的类似:
let keyValues = string.components(separatedBy: CharacterSet.newlines)
.map { $0.split(separator: ":") } // Split each element on :
.compactMap { // return (key, value) pairs, throwing away any malformed rows
if $0.count > 1 { ($0[0], $0[1]) } else { nil }
}
// combine pairs into a dictionary, keeping the new value if duplicates are found
let dict = Dictionary(keyValues, uniquingKeysWith: { _, new in new } )
如果您的代码非常简单并且不需要非常健壮,我只推荐这样的代码。在健壮的代码中,您需要检查错误并处理它们,而不是以这种方式忽略它们。