swift - Convertir URL a cadena y viceversa
nsurl (8)
Así que he convertido un
NSURL
en una
String
.
Entonces, si
println
se ve como
file:///Users/...
etc.
Más tarde, quiero que esto vuelva como
NSURL
así que trato de convertirlo de nuevo como se ve a continuación, pero pierdo dos de las barras diagonales que aparecen en la versión de cadena anterior, que a su vez rompe el código ya que la
url
no es válida.
¿Por qué mi conversión de nuevo a
NSURL
elimina dos barras diagonales de la
String
que le doy, y cómo puedo convertir de nuevo a
NSURL
contiene tres barras diagonales?
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
Swift 3 utilizado con UIWebViewDelegate shouldStartLoadWith
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
}
}
ACTUALIZACIÓN: preste atención a la url, puede ser nula en este ejemplo. Puede ajustar su url en la cita para convertirla en una cadena
let urlString = "http://ifconfig.me"
//string to url
let url = NSURL(string: urlString)
//url to string
let string = "/(url)"
Código de versión de Swift 3:
let urlString = "file:///Users/Documents/Book/Note.txt"
let pathURL = URL(string: urlString)!
print("the url = " + pathURL.path)
En Swift 4 y Swift 3 , para convertir String a URL:
URL(string: String)
o,
URL.init(string: "yourURLString")
Y para convertir URL a String:
URL.absoluteString
El siguiente convierte los ''contenidos'' de la url a cadena
String(contentsOf: URL)
Hay una mejor manera de obtener la versión de cadena de la ruta desde NSURL en Swift:
let path:String = url.path
fileURLWithPath()
se utiliza para convertir una ruta de archivo simple (por ejemplo, "/ ruta / a / archivo") a una URL.
Su
urlString
es una cadena URL completa que incluye el esquema, por lo que debe usar
let url = NSURL(string: urlstring)
para volver a convertirlo a
NSURL
.
Ejemplo:
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
Swift 3 (olvídate de NSURL).
let fileName = "20-01-2017 22:47"
let folderString = "file:///var/mobile/someLongPath"
Para hacer una URL de una cadena:
let folder: URL? = Foundation.URL(string: folderString)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath
Si queremos agregar el nombre del archivo. Tenga en cuenta que appendingPathComponent () agrega el porcentaje de codificación automáticamente:
let folderWithFilename: URL? = folder?.appendingPathComponent(fileName)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath/20-01-2017%2022:47
Cuando queremos tener String pero sin la parte raíz (tenga en cuenta que el porcentaje de codificación se elimina automáticamente):
let folderWithFilename: String? = folderWithFilename.path
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017 22:47"
Si queremos mantener la parte raíz, hacemos esto (pero tenga en cuenta el porcentaje de codificación, no se elimina):
let folderWithFilenameAbsoluteString: String? = folderWithFilenameURL.absoluteString
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017%2022:47"
Para agregar manualmente el porcentaje de codificación para una cadena:
let folderWithFilenameAndEncoding: String? = folderWithFilename.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017%2022:47"
Para eliminar el porcentaje de codificación:
let folderWithFilenameAbsoluteStringNoEncodig: String? = folderWithFilenameAbsoluteString.removingPercentEncoding
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017 22:47"
La codificación porcentual es importante porque las URL de las solicitudes de red las necesitan, mientras que las URL del sistema de archivos no siempre funcionan, depende del método real que las use. La advertencia aquí es que pueden eliminarse o agregarse automáticamente, por lo que es mejor depurar estas conversiones con cuidado.
let url = URL(string: "URLSTRING HERE")
let anyvar = String(describing: url)