J'ai donc converti un NSURL
en un String
. Donc si je println
ressemble à file:///Users/...
etc.
Plus tard, je veux que cela revienne comme un NSURL
alors j'essaie de le reconvertir comme indiqué ci-dessous, mais je perds deux des barres obliques qui apparaissent dans la version de chaîne ci-dessus, qui à son tour casse le code car le url
n'est pas valide.
Pourquoi ma conversion revient-elle à NSURL
supprimer deux barres obliques de la barre oblique que String
je lui donne, et comment puis-je convertir à nouveau les NSURL
trois barres obliques contenant?
var urlstring: String = recordingsDictionaryArray[selectedRow]["path"] as String
println("the url string = \(urlstring)")
// looks like file:///Users/........etc
var url = NSURL.fileURLWithPath(urlstring)
println("the url = \(url!)")
// looks like file:/Users/......etc
Réponses:
fileURLWithPath()
est utilisé pour convertir un chemin de fichier simple (par exemple "/ chemin / vers / fichier") en une URL. VotreurlString
est une chaîne URL complète comprenant le schéma, vous devez donc utiliserpour le reconvertir en
NSURL
. Exemple:la source
URL(string: urlstring)
Dans Swift 4 et Swift 3 , pour convertir une chaîne en URL:
ou,
Et pour convertir l'URL en chaîne:
Celui ci-dessous convertit le 'contenu' de l'url en chaîne
la source
String(contentsOf: URL)
renvoie la charge utile réelle de cette ressource, pas l'URL au format chaîne. UtilisezURL.absoluteString
pour obtenir la version chaîne de l'URL. developer.apple.com/reference/foundation/nsurl/…Il existe un moyen plus agréable d'obtenir la version chaîne du chemin à partir du NSURL dans Swift:
la source
/questions/27062454/converting-url-to-string-and-back-again
pour l'url/programming/27062454/converting-url-to-string-and-back-again
file://
format.AVIS : faites attention à l'url, c'est
optional
et ça peut l'êtrenil
. Vous pouvez envelopper votre URL dans le devis pour la convertir en chaîne. Vous pouvez le tester dans la cour de récréation.Mise à jour pour Swift 5, Xcode 11:
la source
file:///Users/foo
). Alors que si seul le chemin absolu est nécessaire (pensez/Users/foo
), ilurl.path
doit être utilisé comme dans la réponse de @ iphaaw ci-dessous.la source
Swift 3 (oubliez NSURL).
Pour créer une URL à partir d'une chaîne:
Si nous voulons ajouter le nom du fichier. Notez que appendingPathComponent () ajoute automatiquement le pourcentage d'encodage:
Lorsque nous voulons avoir String mais sans la partie racine (faites attention que le pourcentage d'encodage est supprimé automatiquement):
Si nous voulons conserver la partie racine, nous le faisons (mais attention au pourcentage d'encodage - il n'est pas supprimé):
Pour ajouter manuellement le codage en pourcentage d'une chaîne:
Pour supprimer le codage en pourcentage:
Le codage en pourcentage est important car les URL pour les requêtes réseau en ont besoin, tandis que les URL vers le système de fichiers ne fonctionneront pas toujours - cela dépend de la méthode réelle qui les utilise. La mise en garde ici est qu'ils peuvent être supprimés ou ajoutés automatiquement, il vaut donc mieux déboguer ces conversions avec soin.
la source
Code de version Swift 3:
la source
2020 | SWIFT 5.1:
Et extension pour
URL?
usage:
la source
la source