2017-01-13 2 views
0

Я пытаюсь использовать:компании Apple Swift 3.0 Данные

init(contentsOf: URL, options: Data.ReadingOptions) 

в Swift 3.0 с Xcode 8.0. Точная формулировка я использую:

let jsonData = try Data.init(contentsOf: URL(file_path), options: .mappedIfSafe) 

Я также попытался:

let jsonData = try Data(contentsOf: URL(file_path), options: .mappedIfSafe) 

Я после documentation

Это не компилируется, жалуясь неверных ярлыков аргументов в вызове.

Я быстрый новичок, поэтому, пожалуйста, будьте осторожны. file_path - это строка, полученная из NSOpenPanel и строковая с использованием stringValue.

Спасибо!

+2

Обратите внимание, что это соглашение Swift использует 'camelCase', а не' snake_case'. – Hamish

ответ

5

Не используйте строковые пути в сочетании с NSOpenPanel, получить url свойство - что позволяет обойтись без дополнительного шага для создания URL - и обернуть Data инициализатору в do - catch блоке.

if let url = openPanel.url { 
    do { 
     let jsonData = try Data(contentsOf: url, options: .mappedIfSafe) 
     // do things with jsonData 
    } catch { 
     print(error) 
    } 
} 
+0

Избегание строковых путей может быть хорошим советом, но для этого требуется некоторое обоснование. Это также, похоже, не имеет большого отношения к проблеме, о которой спрашивает ОП. – Caleb

+1

Я добавил некоторое обоснование – vadian

+0

На что он жалуется: неверные метки аргументов в вызове (есть «contentsOf: options: _:« expected »bytesNoCopy: count: deallocator: ') –

1

Похоже, вы просто пропустили метку параметра. Кроме того, нет необходимости в ключевом ключе init в вашем конструкторе Data.

let jsonData = try Data(contentsOf: URL(fileURLWithPath: filePath), options: .mappedIfSafe) 
Смежные вопросы