我正在尝试迭代一系列类似于此
的字符//Example.txt
0 X X X 0
0 X 0 X 0
0 0 X 0 0
0 X 0 X 0
0 X X X 0
我希望能够分辨出X和0之间的区别。我目前使用的代码导致无限循环运行,然后我的应用程序永远不会完成构建。
let path = Bundle.main.path(forResource: "Example.txt", ofType: nil)
do {
let fileContents = try String(contentsOfFile:path!, encoding: String.Encoding.utf8)
let lines = fileContents.components(separatedBy: "\n")
for row in 0..<lines.count {
let items = lines[row].components(separatedBy: " ")
for column in 0..<items.count {
print(column,row)
}
}
} catch {
print("Error loading map")
}
它将完美地迭代.txt文档,它只是没有完成构建和运行,它被卡在白色加载屏幕上。我认为它与文本的编码有关
如何修复无限循环错误,并告诉我稍后要添加的不同字符之间的区别。
- 编辑 -
我想出了如何使用 -
来测试角色以区分它们for row in 0..<lines.count {
let items = lines[row].components(separatedBy: " ")
for column in 0..<items.count {
if items[1] == "0" {
print("0")
} else {
print("X")
}
}
}
问题是它将文档中的每一行视为一个数组,因此当测试达到数组越界错误时, items 行。
答案 0 :(得分:1)
您没有使用&#34;列&#34;在你内心的变量。实际上,在每次迭代中,您总是要比较&#34;项目的第二个元素&#34;数组(items[1]
)针对&#34; 0&#34; 。如果items数组少于2个元素,则会导致越界错误。
也许你应该按如下方式迭代(我建议使用&#34; for&#34;循环):
for line in lines {
let items = line.components(separatedBy: " ")
for item in items {
if item == "0" {
print("0")
} else {
print("X")
}
}
}
虽然我不理解你的&#34; if else&#34;,如果该文件只能包含&#34; 0&#34;或&#34; X&#34;并且您只是将其可视化,您可能只需要print(item)
。