J'ai donc converti un NSURL
en un String
. Donc, si je println
cela ressemble à file:///Users/...
etc.
Plus tard, je veux que cela retourne en tant que NSURL
alors j’essaie de le reconvertir comme indiqué ci-dessous, mais je perds deux des barres obliques qui apparaissent dans la version chaîne ci-dessus, ce qui rompt le code en tant que url
est invalide.
Pourquoi ma conversion en NSURL
supprime-t-elle deux barres obliques du String
que je lui donne, et comment puis-je reconvertir en NSURL
contenant trois barres obliques?
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
fileURLWithPath()
est utilisé pour convertir un chemin de fichier brut (par exemple, "/ path/to/file") en une URL. Votre urlString
est une chaîne d'URL complète incluant le schéma, vous devez donc utiliser
let url = NSURL(string: urlstring)
pour le reconvertir en NSURL
. Exemple:
let urlstring = "file:///Users/Me/Desktop/Doc.txt"
let url = NSURL(string: urlstring)
println("the url = \(url!)")
// the url = file:///Users/Me/Desktop/Doc.txt
Dans Swift 4 et Swift, Pour convertir une chaîne en URL:
URL(string: String)
ou,
URL.init(string: "yourURLString")
Et convertir l'URL en chaîne:
URL.absoluteString
Celui ci-dessous convertit le 'contenu' de l'URL en chaîne
String(contentsOf: URL)
Il existe un moyen plus agréable d’obtenir la version sous forme de chaîne du chemin depuis NSURL dans Swift:
let path:String = url.path
UPDATE: faites attention à l'URL, il peut être nul dans cet exemple. Vous pouvez envelopper votre URL dans la citation pour la convertir en chaîne
let urlString = "http://ifconfig.me"
//string to url
let url = NSURL(string: urlString)
//url to string
let string = "\(url)"
let url = URL(string: "URLSTRING HERE")
let anyvar = String(describing: url)
Swift (oubliez NSURL).
let fileName = "20-01-2017 22:47"
let folderString = "file:///var/mobile/someLongPath"
Pour créer une URL à partir d'une chaîne:
let folder: URL? = Foundation.URL(string: folderString)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath
Si nous voulons ajouter le nom de fichier. Notez que appendingPathComponent () ajoute automatiquement le pourcentage d'encodage:
let folderWithFilename: URL? = folder?.appendingPathComponent(fileName)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath/20-01-2017%2022:47
Lorsque nous voulons avoir String mais sans la partie racine (sachez que le pourcentage d'encodage est automatiquement supprimé):
let folderWithFilename: String? = folderWithFilename.path
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017 22:47"
Si nous voulons conserver la partie racine, nous procédons de la sorte (mais attention au codage en pourcentage - il n'est pas supprimé):
let folderWithFilenameAbsoluteString: String? = folderWithFilenameURL.absoluteString
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017%2022:47"
Pour ajouter manuellement le pourcentage d'encodage d'une chaîne:
let folderWithFilenameAndEncoding: String? = folderWithFilename.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017%2022:47"
Pour supprimer le codage en pourcentage:
let folderWithFilenameAbsoluteStringNoEncodig: String? = folderWithFilenameAbsoluteString.removingPercentEncoding
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017 22:47"
Le pourcentage d'encodage est important car les URL des requêtes réseau en ont besoin, tandis que les URL des systèmes de fichiers ne fonctionnent pas toujours - cela dépend de la méthode qui les utilise. La mise en garde ici est qu'ils peuvent être supprimés ou ajoutés automatiquement, il est donc préférable de déboguer ces conversions avec soin.
Code de version de Swift 3:
let urlString = "file:///Users/Documents/Book/Note.txt"
let pathURL = URL(string: urlString)!
print("the url = " + pathURL.path)
Swift 3 utilisé avec UIWebViewDelegate devraitStartLoadWith
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
let urlPath: String = (request.url?.absoluteString)!
print(urlPath)
if urlPath.characters.last == "#" {
return false
}else{
return true
}
}