在 Swift 中保存数组

Posted

技术标签:

【中文标题】在 Swift 中保存数组【英文标题】:Saving Arrays in 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;它是最热门的。 【参考方案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 而不是路径创建了相同的内容

以上是关于在 Swift 中保存数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xCode 中保存 UIimages 数组(swift)

Swift:将一个对象数组和另一个对象数组保存到 NSUserDefaults 中

如何在swift中将json数组保存和检索到用户默认值?

从 Firebase 读取数据并保存到数组中 (Swift)

在 Swift 中将实例变量的属性保存到 Struct 的静态变量数组中

使用 swift 将数组保存和检索到用户默认值