2017-06-04 112 views
0

我想在文件中编写一个数组的数组。读完后,结果是一个字符串,我想知道如何读取一个数组数组或将字符串转换为数组数组?将字符串转换为Swift 3中的整型数组?

let file = "sample.txt" 
var arr1 = [Int]() 
arr1 += 1...100 
var text = String(describing: arr1) 
var text1 : String = String() 
if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { 
    let path = dir.appendingPathComponent(file) 

    // writing 
    do { 
     try text.write(to: path, atomically: false, encoding: String.Encoding.utf8) 
    } 
    catch {/* error handling here */} 

    //reading 
    do { 
     text1 = try String(contentsOf: path, encoding: String.Encoding.utf8) 
    } 
    catch {/* error handling here */} 
} 

现在的问题是如何将text1转换为数组数组?

+2

你的意思是一个字符串转换为整数数组?尝试分割到字符串列表,然后将每个数组项目转换为int(谷歌它) –

回答

1

的问题是:如果你想保存的Int数组为什么写和读String

保存Int数组最简单的方法是属性列表格式。

虽然在夫特的推荐的方法是PropertyListSerialization类这种写和由桥接夫特ArrayNSArray读取Int阵列。

let file = "sample.plist" 
let arrayToWrite = [Int](1...100) 
var arrayToRead = [Int]() 

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

    let url = dir.appendingPathComponent(file) 

    // writing 

    (arrayToWrite as NSArray).write(to: url, atomically: false) 

    //reading 

    arrayToRead = NSArray(contentsOf: url) as! [Int] 
    print(arrayToRead) 
} 

使用PropertyListSerializationswiftier方式是

// writing 

do { 
    let data = try PropertyListSerialization.data(fromPropertyList: arrayToWrite, format: .binary, options: 0) 
    try data.write(to: url, options: .atomic) 
} 
catch { print(error) } 

//reading 

do { 
    let data = try Data(contentsOf: url) 
    arrayToRead = try PropertyListSerialization.propertyList(from: data, format: nil) as! [Int] 

    print(arrayToRead) 
} 
catch { print(error) } 
+0

真棒它的工作原理! – Mohammad

+0

可能是JSONSerialization是另一种可能性,如何轻松做到“正确的方式”。 – user3441734