我有一个文本文件,其中包含以下格式的一系列字符串参数:
# name:test name visible:false ignore:false comment:this is a comment
参数可以是任何顺序,它们可以有任何名称,包括我不知道的名称。我想将这些解析成字典。使用传统的字符串处理我会这样做:
在Swift下,所有这些看起来都非常困难。其中很大一部分原因是Apple几乎完全缺乏文档和示例。我知道我可以使用rangeOfString
来查找冒号,但我遗失了如何找到 next 冒号或之前的空间。即使这样,使用范围中的信息来剪切各个位似乎也很困难。我找到了一些帮助程序代码,但它完全适用于Swift 1.0,并且不再适用于Swift 2。
那么,是否有人指出了一系列用于执行此类操作的常规例程,或者有关如何执行该操作的建议?
答案 0 :(得分:2)
格式不是IOS上常用的格式之一,但可以通过一些转换来处理:
var dict:[String:String] = [:]
let line = "name:test name visible:false ignore:false comment:this is a comment"
// The process:
// - separate components on spaces
// - re-combine using \n before elements containing ":" and restoring spaces for others
// - separate into array of key:value (now separated by \n)
// - remove empty element before first key:value pair
// - separate each key:value into a two element array
// - assign values to keys in dictionary
//
line.componentsSeparatedByString(" ")
.reduce("", combine: { $0 + ($1.containsString(":") ? "\n" : " ") + $1 })
.componentsSeparatedByString("\n")
.filter({ $0 != "" })
.map({ $0.componentsSeparatedByString(":") })
.forEach({ dict[$0.first!] = $0.last })
// dict will contain :
//
// visible:false
// comment:this is a comment
// ignore:false
// name:test name