web-dev-qa-db-fra.com

Conversion d'URL en chaîne et retour

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
113
Gary Simpson

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
106
Martin R

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)
124
Naishta

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
65
iphaaw

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)"
24
Roger
let url = URL(string: "URLSTRING HERE")
let anyvar =  String(describing: url)
14
Ahsan

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.

13
Vitalii

Code de version de Swift 3:

let urlString = "file:///Users/Documents/Book/Note.txt"
let pathURL = URL(string: urlString)!
print("the url = " + pathURL.path)
9
mriaz0011

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
    }

}
1
Raj Joshi