gpt4 book ai didi

arrays - 在 Xcode 10.2 中将数组读取和写入文本文件的代码

转载 作者:行者123 更新时间:2023-11-28 07:25:54 25 4
gpt4 key购买 nike

我是 Swift 和 Xcode 的初学者,尝试做一个简单的数据持久化应用程序。我正在寻找将数组读取和写入文本文件的代码。这个想法是有一个包含一条信息的初始数组。在 TableView 加载过程中,如果文本文件中有数据,则将数据加载到 TableView 中。如果没有数据,则显示 TableView 数组中的数据。当用户输入数据时,用数组中的数据更改重写文本文件。

我尝试了一些代码,但每次都遇到重新创建文件的问题,所以代码不是从文本文件中读取。

// This function reads from text file and makes the array.
func readDataFromFile(){
let fileURL = dir?.appendingPathComponent(strFileName)
print(fileURL as Any)

//Adding this new as the path seems to change everytime, need fixing here.
let fileManager = FileManager.default
let pathComponent = fileURL!.appendingPathComponent(strFileName)
let filePath = pathComponent.path
if fileManager.fileExists(atPath: filePath){
try allToys = NSMutableArray(contentsOf: fileURL!) as! [String]
}
else
{
writeArrayToFile()
}
}

// This is to write array of data to a file
func writeArrayToFile()
{
let fileURL = dir?.appendingPathComponent(strFileName)
(allToys as NSArray).write(to: fileURL!, atomically: true)
}

期望:每次都从同一个文件中读取数据实际:每次都创建一个新的动态路径,所以数据没有被保留。

新代码

let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first

func writeArrayToFile(){
let fileURL = dir?.appendingPathComponent(fileName)
(allToys as NSArray).write(to: fileURL!, atomically: true)
}

func readDataFromFile(){
let fileURL = dir?.appendingPathComponent(fileName)
let fm = FileManager()
if(fileURL != nil) {
if(!(fm.fileExists(atPath: (fileURL?.path)!))){
let temp = NSMutableArray(contentsOf: fileURL!)
if (temp != nil) {
allToys = NSMutableArray(contentsOf: fileURL!) as! [String]
}
}
}

另外,有没有办法使用相对或绝对路径而不是动态路径?

最佳答案

一个问题是您仅在文件不存在时才尝试读取该文件,if(!(fm.fileExists

由于我在重写和尝试理解代码时意识到这一点,所以我不妨发布我的代码版本。请注意,由于我没有完全理解您的类/结构定义,我通过使用参数和返回值而不是属性使函数更加独立

我跳过了 dir 作为属性并将它变成一个局部变量,这是我的写函数

func write(_ array: [Any], toFile fileName: String){
guard let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
fatalError("No Document directory found")
}
let fileUrl = dir.appendingPathComponent(fileName)
(array as NSArray).write(to: fileUrl, atomically: true)
}

并且通过不使用 FileManager 简化了读取功能

func read(_ fromFile: String) -> [String]? {
guard let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
fatalError("No Document directory found")
}
let fileUrl = dir.appendingPathComponent(fromFile)
if let temp = NSArray(contentsOf: fileUrl) {
return temp as? [String]
}
return nil
}

测试代码

let fileName = "toys.txt"
var allToys = ["Duck", "Playstation", "iPhone"]

write(allToys, toFile: fileName)

if let saved = read(fileName) {
allToys = saved
allToys.append("Lego")
write(allToys, toFile: fileName)
}

关于arrays - 在 Xcode 10.2 中将数组读取和写入文本文件的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56613372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com