我是Swift的新手。
我正在尝试编写一个简单的应用程序,该应用程序仅读取文件并将其内容转换为字符串。我正在使用FileManager和此处给出的Swift 4示例:https://expressjs.com/en/api.html#res.sendFile
虽然没有用。我假设的问题是,我给String(contentsOf: URL)
方法提供了错误的URL。抛出的确切错误是因为它不存在而无法打开文件。
下面是我的ViewController.swift
代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var testText: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let test = directoryContents()
do {
let text = try String(contentsOf: test)
testText.text! = text
}
catch{
print(error.localizedDescription)
}
}
}
func directoryContents() -> URL {
var dirContents: URL!
dirContents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
dirContents = dirContents.appendingPathComponent("testdata.txt")
return dirContents
}
其余的应用程序文件是通用的Single View App文件。我会包含侧边栏的图像,但是问题编辑器在尝试上载时抛出错误。基本上,它看起来像:
testingData/
testingData/
TestData/
testdata.txt
AppDelegate.swift
ViewController.swfit
Main.storyboard
Assets.xcassets
LaunchScreen.storyboard
Info.plist
Products/
testingData.app
在Main.storyboard
上添加了TextView
,即我的testText
中的ViewController
。我试图读取的文件是testdata.txt
,这是一个包含文本1,2,3,4,5,6
且没有其他内容的文本文件。它是testingData
应用程序的成员。
我不确定我缺少什么。如果在这里的其他地方回答了这个问题,请指出我的方向,我将结束。
答案 0 :(得分:3)
如果文件位于应用程序捆绑包中,则必须使用Bundle
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let test = Bundle.main.url(forResource:"testdata", withExtension: "txt")!
do {
let text = try String(contentsOf: test)
testText.text! = text
}
catch {
print(error)
}
}
并删除directoryContents()