web-dev-qa-db-fra.com

Qu'est-ce que l'équivalent Swift 3 de NSURL.URLByAppendingPathComponent ()?

Je suis n tutoriel de base sur la construction d'une application iOS simple dans Swift.

Il est écrit en Swift 2.x, et je travaille avec XCode 8 Beta et Swift 3.

Le didacticiel suggère d'utiliser NSFileManager pour rechercher un répertoire de données. Les noms de classe ont changé, donc la correction automatique Swift 3 ressemble à ceci:

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

Cependant, Xcode se plaint maintenant que

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

Je n'arrive pas à savoir comment s'appelle la méthode maintenant.

NSURL Class Reference ne contient aucune indication sur la façon de l'adresser à partir de Swift 3

  • Quel est le nouveau nom de la méthode?

  • Où dois-je aller pour trouver une référence de classe complète pour Swift 3 (ou, l'interface Swift 3 à la bibliothèque URL classe est définie dans - je ne comprends toujours pas complètement la nomenclature) donc je peux les rechercher moi-même à l'avenir?

26
Pekka 웃

À partir de Xcode 8 beta 4, il est nommé appendingPathComponent(_:) , et ne lance pas.

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

Aussi comme Leo Dabus le souligne dans les commentaires , votre propriété documentsDirectory devra être modifiée pour utiliser urls(for:in:) en beta 4:

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

(Notez que j'ai fait vos noms de propriété lowerCamelCase, conformément aux directives de conception de l'API Swift . Je recommanderais également d'utiliser FileManager.default, Plutôt que de créer une nouvelle instance .)

Vous pouvez jeter un oeil à le dernier guide de référence d'API d'Apple pour voir les changements de nom d'API qui ont eu lieu dans Swift 3.

42
Hamish

Il a maintenant changé en appendingPathComponent(_:) et il lance, vous devez donc l'envelopper dans do - catch block

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

Mise à jour

Selon Xcode 8 beta 4, la appendingpathcomponent(_:) ne génère pas d'erreur.

Pour des informations pertinentes, voir réponse par @ Hamish

12
Khundragpan
func appendingPathComponent(String)

=> Renvoie une nouvelle URL créée en ajoutant un composant de chemin à l'URL d'origine.

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

S'il s'agit d'un répertoire:

func appendingPathComponent(String, isDirectory: Bool)

=> Renvoie une nouvelle URL créée en ajoutant un composant de chemin à l'URL d'origine, ainsi qu'une barre oblique si le composant est désigné comme un répertoire.

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