Swift 3中contentsOfFile出现do-try-catch问题的原因是什么?

Swift 3中contentsOfFile出现do-try-catch问题的原因是什么?,swift,swift3,Swift,Swift3,我最近将我正在进行的一个项目的语法从Swift 2.3转换为Swift 3,并且在获取txt文件的内容并将其转换为字符串时遇到了一些问题。我的项目中的旧txt文件一切正常,但新txt文件在我的代码的try部分失败 我不太熟悉try/catch的工作原理,但我已经测试了代码,并且在不工作的文件上测试了代码的catch部分正在运行,因此我假设try部分在这些情况下失败。这是某种bug还是Swift 3中发生了变化?我已经检查了新文件,它们是txt文件,格式与工作txt文件完全相同,所以我不确定出了什

我最近将我正在进行的一个项目的语法从Swift 2.3转换为Swift 3,并且在获取txt文件的内容并将其转换为字符串时遇到了一些问题。我的项目中的旧txt文件一切正常,但新txt文件在我的代码的try部分失败

我不太熟悉try/catch的工作原理,但我已经测试了代码,并且在不工作的文件上测试了代码的catch部分正在运行,因此我假设try部分在这些情况下失败。这是某种bug还是Swift 3中发生了变化?我已经检查了新文件,它们是txt文件,格式与工作txt文件完全相同,所以我不确定出了什么问题

if let filepath = Bundle.main.path(forResource: fileName, ofType: "txt") {
    do {
        contents = try String(contentsOfFile: filepath, encoding: String.Encoding.utf8)


        print(contents)


        textView.text = contents
    } catch {
        // contents could not be loaded

        print(error)

    }
} else {
        print("No contents found")
}
带有编码参数的错误消息:

Error Domain=nscocaerorrordomain Code=261“无法使用文本编码Unicode(UTF-8)打开文件“35 IAC 14-印第安纳州教师退休基金.txt”。“UserInfo={NSFilePath=/Users/graysonfaircloth/Library/Developer/CoreSimulator/Devices/(删除的数字)/数据/容器/捆绑包/应用程序/(删除的数字)/CCHA-test-app.app/35 IAC 14-印第安纳州教师退休基金.txt,NSStringEncoding=4}

没有编码参数的错误消息:

Error Domain=NSCOCAERRORDOMAIN Code=264“无法打开文件”35 IAC 14-印第安纳州教师退休基金.txt,因为无法确定其内容的文本编码。”UserInfo={NSFilePath=/Users/graysonfaircloth/Library/Developer/CoreSimulator/Devices/(删除的数字)/data/Containers/Bundle/Application/(删除的数字)/CCHA-test-app.app/35 IAC 14-印第安纳州教师退休基金.txt}


在Swift 3中,我们扩展了使用投掷,我认为这比处理错误更好

您需要检查您的文件是否包含在生成中
并检查文件名。


您还可以打印路径并手动检查文件是否已添加到构建(模拟器)。

为什么只打印帮助而不显示实际错误?可能该文件不存在于该位置,或者不可读?或者其内容无效UTF-8?不要猜测,
打印(错误)
在错误案例中!谢谢。我已更新问题以包含错误消息。这使我相信该文件存在一些问题,但我检查了这些文件,没有发现任何问题。运行Terminal并转到包含文本文件的文件夹。键入命令
file 35 IAC 14-印第安纳州教师退休人员t Fund.txt
文件
命令的输出应该告诉您文件编码是什么。@rmaddy谢谢!我知道没有加载的文件是ISO-8859文本文件。但是,我还不知道为什么它们是这样编码的。我正在从其他人上传的Dropbox下载文件。有什么方法可以更改吗将这些文件转换为Swift可以读取的内容?由于代码正在进入
do/catch
路径,因此很明显,路径上确实存在文件。