2017-01-13 5 views
0

Ich versuche zu verwenden:Apple-Swift 3.0 Daten

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

in Swift 3.0 mit xCode 8.0. Die genaue Aussage Ich verwende ist:

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

Ich habe auch versucht:

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

Ich bin nach dem documentation

Diese nicht kompiliert, um eine falsche Argument Etiketten in Call beschweren.

Ich bin ein schneller Neuling, also bitte sei sanft. file_path ist eine Zeichenfolge, die von einer NSOpenPanel erhalten und mit stringValue beschriftet wird.

Danke!

+2

Beachten Sie, dass es Swift Convention ist, 'camelCase' anstelle von' snake_case' zu ​​verwenden. – Hamish

Antwort

5

Sie mit NSOpenPanel String Pfade in Verbindung nicht verwenden, erhalten die url Eigenschaft - das den zusätzlichen Schritt vermeidet die URL zu erstellen - und wickeln Sie den Data initializer in einem do - catch Block.

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

Die Vermeidung von String-Pfaden könnte ein guter Rat sein, aber es bedarf einiger Rechtfertigung. Es scheint auch nicht viel mit dem Problem zu tun zu haben, um das sich das OP bemüht. – Caleb

+1

Ich habe einige Begründung hinzugefügt – vadian

+0

Was es beschwert sich ist: Falsche Argument Etiketten in Aufruf (haben 'contentsOf: Optionen: _:' erwartet 'BytesNoCopy: count: enallocator:') –

1

Es sieht so aus, als ob Sie gerade die Parameterbezeichnung verpasst haben. Außerdem ist das init-Schlüsselwort in Ihrem Data-Konstruktor nicht erforderlich.

let jsonData = try Data(contentsOf: URL(fileURLWithPath: filePath), options: .mappedIfSafe) 
Verwandte Themen