2015-08-20 11 views
14

Ich erhalte den Fehler‚stringByAppendingPathComponent‘ ist nicht verfügbar

'stringByAppendingPathComponent' is unavailable: Use 'stringByAppendingPathComponent' on NSString instead. 

wenn ich versuche,

let documentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
let databasePath = documentsFolder.stringByAppendingPathComponent("test.sqlite") 

zu tun, bevor, aber es funktioniert nicht für mich jetzt in Xcode 7 beta 5.

This thread auf den Apple Developer Foren hatte den Vorschlag, eine Erweiterung zu verwenden oder eine direkte Besetzung zu NSString. Aber wenn ich es konvertieren zu einem NSString

let databasePath = documentsFolder.stringByAppendingPathComponent("test.sqlite" as NSString) 

dann erhalte ich die Fehler

'NSString' is not implicitly convertible to 'String'... 

und es gibt mir die Möglichkeit, „Fix-it“ von as String Einfügen, die uns auf die zurückbringt ursprünglicher Fehler Dies geschieht auch für stringByAppendingPathExtension.

Was mache ich?

Antwort

26

Sie können eher eine URL als einen String-Pfad erstellen.

let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first 
let fileURL = documentsURL?.appendingPathComponent("test.sqlite") 

Wenn Sie unbedingt den Pfad benötigen, dann können Sie es wie folgt erhalten:

guard let path = fileURL?.path else { 
    return 
} 

print(path) // path will exist at this point 

einige Diskussionen in der thread Es gab Sie erwähnt, dass Apple absichtlich Menschen führen kann zu URLs verwenden, anstatt Zeichenfolge Pfade.

Siehe auch:

11

Sie verwenden können:

let dbPath = (documentsFolder as NSString).stringByAppendingPathComponent("db.sqlite") 
+2

Obwohl dies funktioniert, wäre es großartig, diese Methode in Swifts String anstelle von NSString zu sehen ... – Ben

Verwandte Themen