2016-08-07 46 views
25

Ich folge a basic tutorial beim Erstellen einer einfachen iOS App in Swift.Was ist das Swift 3-Äquivalent von NSURL.URLByAppendingPathComponent()?

Es wird in Swift 2.x geschrieben, und ich arbeite mit XCode 8 Beta und 3. Swift

Das Tutorial NSFileManager schlägt vor, mit einem Datenverzeichnis zu finden. Klassennamen haben sich geändert, so dass die Auto-Fest Swift 3 sieht wie folgt aus:

static let DocumentsDirectory = FileManager().urlsForDirectory(.documentDirectory, inDomains:.userDomainMask).first! 
static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("meals") 

jedoch Xcode beklagt nun, dass

Value of type 'URL' has no member 'URLByAddingPathComponent' 

Ich bin nicht in der Lage, herauszufinden, was das Verfahren jetzt genannt wird.

Die NSURL Class Reference enthält keine Hinweise, wie es von Swift zu adressieren 3

  • Was heißt das neue Verfahren?

  • Wohin muss ich gehen, um eine vollständige Klassenreferenz für Swift 3 zu finden (oder die Swift 3-Schnittstelle zur Bibliothek ist die URL Klasse definiert - ich verstehe die Nomenklatur immer noch nicht), also kann ich forsche ich diese selbst in der Zukunft?

+2

Gerade .appendingPathComponent ( –

+0

einen Blick auf die [neue 'NSURL' Klassenreferenz] Nehmen Sie (https://developer.apple.com/reference/foundation/nsurl) - es ist jetzt' appendingPathComponent (_ :) ' – Hamish

+0

@Hamish argh, also habe ich mir die falsche Klassenreferenz angeschaut. Danke! Ich nehme an, ich könnte das löschen. (Edit: ah, da gibt es jetzt eine Antwort. Möchtest du selbst eine Hamish veröffentlichen? Sonst werde ich die bearbeiten Referenz Link in K.Nimo's Antwort.) –

Antwort

10

Es ist nun zu appendingPathComponent(_:) verändert hat und es wirft, so müssen Sie es in do einzuwickeln - catch-Block

do { 
    let archiveURL = try documentsDirectory?.appendingPathComponent("meals") 
} catch { 
    print(error) 
} 

aktualisieren

Wie pro Xcode 8 beta 4, die appendingpathcomponent(_:) Fehler nicht ausgeben.

Für relevante Informationen Antwort von @Hamish

39

Ab Xcode 8 Beta 4, siehe ist es appendingPathComponent(_:) genannt, und nicht werfen.

static let archiveURL = documentsDirectory.appendingPathComponent("meals") 

Auch als Leo Dabus points out in the comments, Ihre documentsDirectory Eigenschaft gewechselt werden müssen urls(for:in:) in der Beta zu verwenden. 4:

static let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 

(Beachten Sie, dass ich Ihre Eigenschaftsnamen lowerCamelCase gemacht haben, gemäß dem Swift API design guidelines I würde auch empfehlen, FileManager.default zu verwenden, anstatt eine neue Instanz zu erstellen.)

Sie können sichansehendie API-Namensänderungen zu sehen, die in Swift 3.

4
func appendingPathComponent(String) 

=> Gibt einen neuen URL gemacht durch Anhängen einer Pfadkomponente auf die ursprüngliche URL genommen haben.

static let archiveURL = documentsDirectory?.appendingPathComponent("meals") 

Wenn es Verzeichnis ist:

func appendingPathComponent(String, isDirectory: Bool) 

=> Gibt eine neue URL hergestellt, indem ein Pfadkomponente auf die ursprüngliche URL angehängt wird, zusammen mit einem Schrägstrich, wenn die Komponente ein Verzeichnis bezeichnet wird.

static let archiveURL = documentsDirectory?.appendingPathComponent("meals", isDirectory: true)