【问题标题】:Saving Arrays in Swift在 Swift 中保存数组
【发布时间】:2014-12-06 12:14:53
【问题描述】:

我有一个关于在 Apple 的新编程语言 Swift 中保存数组的问题。在 Objective-C 中,我使用 NSFileManager... 保存了数据,但这在 Swift 中不再起作用。所以我想问我应该如何在不使用 NSUserDefaults 的情况下保存一个数组,这并不适合存储大量数据。我非常感谢任何帮助:]

【问题讨论】:

  • “不起作用”是什么意思?究竟是什么不工作?如果你用 Swift 重写你的 Objective-C 代码,它应该以完全相同的方式工作。
  • NSFileManager 的类参考显示了这些方法的 Swift 版本,因此 Apple 似乎认为它有效。
  • 它们都使用完全相同的运行时并在底层调用完全相同的函数,因此没有理由不工作。
  • 当我想找到可以存储数据的路径时,它实际上从我的 Objective-C 代码的第一行开始: NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);是 Objective-C 中的代码,但 NSDocumentDirectory 在 Swift 中不可用。 @ScottHunter 你能给我一个指向课程参考的链接吗?
  • 谷歌 NSFileManager;它是最热门的。

标签: serialization swift save


【解决方案1】:

首先(如果您的数组不是字符串类型)将其更改为字符串:

var notStringArray = [1, 2, 3, 4]
var array: [String] = []

for value in notStringArray{
    array.append(String(value))
}

然后将数组缩减为一个字符串:

var array = ["1", "2", "3", "4", "5"] //Ignore this line if your array wasn't of type String and you did the step above
var stringFromArray = reduce(array, "") { $0.isEmpty ? $1 : "\($0)\n\($1)" }

这将创建一个如下所示的字符串:

"1
 2
 3
 4
 5"

然后要写入和读取文件,请在文件顶部添加此类:

class File {
    class func open (path: String, utf8: NSStringEncoding = NSUTF8StringEncoding) -> String? {
        var error: NSError?   // 
        return NSFileManager().fileExistsAtPath(path) ? String(contentsOfFile: path, encoding: utf8, error: &error)! : nil
    }
    class func save (path: String, fileContent: String, utf8: NSStringEncoding = NSUTF8StringEncoding) -> Bool {
        var error: NSError?   // 
        return fileContent.writeToFile(path, atomically: true, encoding: utf8, error: &error)
    }

}

(别忘了导入 UIKit)

保存到文件:

let didSave = File.save("DirectoryOfFile", content: stringFromArray) 
if didSave {
    println("file saved") 
} else {
    println("error saving file") 
} 

要取回它:

var stringFromFile = ""

if let loadData = File.open("DirectoryOfFile") {
    stringFromFile = loadData
} else {
    println("error reading file")
}  

将其放回数组中:

var newArray: [String] = [] //Creates empty string array
newArray = stringFromFile.componentsSeparatedByString("\n")

你有它

【讨论】:

  • 请在你的问题中告诉我你的班级。我在我的问题中添加了如果您的数组不是字符串类型该怎么办
  • 可能是我在网上找到的
  • 很高兴你喜欢它,我也为 url 而不是路径创建了相同的内容
猜你喜欢
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多