2017-06-04 12 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(Googleに変換)してみてください –

答えて

1

質問です:あなたはIntの配列を保存したい場合は、なぜStringを読み書きできますか?

Intの配列を保存する最も簡単な方法は、プロパティリスト形式です。

スウィフトで推奨される方法は、PropertyListSerializationクラスですが、これは書き込み、NSArrayにスウィフトArrayをブリッジすることにより、Intの配列を読み取ります。 PropertyListSerializationを使用して

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) 
} 

swiftier方法は、あなたが整数の配列に文字列を変換する意味

// 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

関連する問題