2016-06-02 3 views
3

Here - это мои файлы.Swift - массив/массив массивов массивов в/из файла

Как я могу написать этот массив:

var listOfTasks = [["Hi", "Hello", "12:00"],["Hey there", "What's up?", "3:17"]]

к .txt файл (file.txt)? Я знаю, что есть другие вопросы по этому поводу, но они находятся на других языках (не Swift). Я бы хотел, чтобы он работал на реальном iPhone. Я рад предоставить дополнительную информацию, если это необходимо. Я новичок в Swift, поэтому извините мой вопрос, если это кажется слишком простым. ПРИМЕЧАНИЕ. Я спрашиваю конкретно о массивах, содержащих массивы.

Заранее благодарен!

+0

, где вы хотите, чтобы этот текстовый файл работал? на твоем компьютере? на телефоне? –

+0

@ LukePatterson По телефону. Почему этот вопрос занижается? – atirit

+0

Дубликат: http://stackoverflow.com/questions/24097826/read-and-write-data-from-text-file –

ответ

1

Вы должны использовать NSKeyedArchiver/NSKeyedUnarchiver для чтения/записи вашего массива как файла списка свойств вместо текстового файла. Вы можете сохранить файл в папку настроек внутри библиотеки папки:

let preferencesDirectory = try! NSFileManager().URLForDirectory(.LibraryDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true).URLByAppendingPathComponent("Preferences", isDirectory: true) 

let listOfTasksURL = preferencesDirectory.URLByAppendingPathComponent("listOfTasks.plist") 

var listOfTasks: [[String]] { 
    get { 
     return NSKeyedUnarchiver.unarchiveObjectWithFile(listOfTasksURL.path!) as? [[String]] ?? [] 
    } 
    set { 
     NSKeyedArchiver.archiveRootObject(newValue, toFile: listOfTasksURL.path!) 
    } 
} 

Если вы хотите, чтобы проверить его в файле игровой площадке вам нужно будет сохранить его в каталог документов:

let documentsDirectory = try! NSFileManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true) 

let listOfTasksURL = documentsDirectory.URLByAppendingPathComponent("listOfTasks.plist") 

var listOfTasks: [[String]] { 
    get { 
     return NSKeyedUnarchiver.unarchiveObjectWithFile(listOfTasksURL.path!) as? [[String]] ?? [] 
    } 
    set { 
     NSKeyedArchiver.archiveRootObject(newValue, toFile: listOfTasksURL.path!) 
    } 
} 

listOfTasks = [["Hi", "Hello", "12:00"],["Hey there", "What's up?", "3:17"]] 

listOfTasks // [["Hi", "Hello", "12:00"], ["Hey there", "What's up?", "3:17"]] 
+0

Этот код представляется для массива строк; У меня есть массив, содержащий массивы, которые, в свою очередь, содержат ** несколько строк для каждого подматрица **. Или, может быть, я неправильно реализую код. EDIT: Извините, мой плохой, было не очень ясно. Или этот код работает для нескольких? – atirit

+0

@ghostpotato это не сильно меняет код –

2

Уже answered you в your other question:

Вот полный работает площадка образец:

let fileUrl = NSURL(fileURLWithPath: "/tmp/foo.plist") // Your path here 
let listOfTasks = [["Hi", "Hello", "12:00"], ["Hey there", "What's up?", "3:17"]] 

// Save to file 
(listOfTasks as NSArray).writeToURL(fileUrl, atomically: true) 

// Read from file 
let savedArray = NSArray(contentsOfURL: fileUrl) as! [[String]] 

print(savedArray) 
Смежные вопросы