2015-08-20 43 views
14

che sto ottenendo l'errore'stringByAppendingPathComponent' non è disponibile

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

quando provo a fare

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

Questo a quanto pare ha funzionato per le persone prima, ma non funziona per me ora in Xcode 7 beta 5.

This thread sui forum degli sviluppatori Apple ha avuto il suggerimento di utilizzare un'estensione o fare un cast diretto a NSString. Ma se lo faccio convertirlo in un NSString

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

allora ottengo l'errore

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

e mi dà la possibilità di "fix-it" con l'inserimento di as String, che ci riporta alla errore originale

Ciò accade anche per stringByAppendingPathExtension.

Cosa devo fare?

risposta

26

È possibile creare un URL piuttosto che un percorso di stringa.

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

Se è assolutamente necessario il percorso, allora si può ottenere in questo modo:

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

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

Si è discusso nel thread lei ha detto che Apple potrebbe essere volutamente guidare le persone verso l'uso di URL piuttosto che Percorsi di stringhe.

Consulta anche:

11

È possibile utilizzare:

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

Sebbene funzioni, sarebbe bello vedere questo metodo in Swifts String anziché NSString ... – Ben

Problemi correlati