通过字符串迭代并测试字符的差异

时间:2018-01-09 14:26:33

标签: swift string

我正在尝试迭代一系列类似于此

的字符
//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 行。

1 个答案:

答案 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)