Итак, я преобразовал файл NSURL
в String
. Так что, если мне println
кажется и file:///Users/...
т. Д.
Позже я хочу вернуть это обратно, NSURL
поэтому я пытаюсь преобразовать его обратно, как показано ниже, но я теряю две косые черты, которые появляются в строковой версии выше, что, в свою очередь, нарушает код, поскольку url
он недействителен.
Почему мое преобразование возвращается к NSURL
удалению двух косых черт из того, что String
я ему даю, и как я могу преобразовать обратно в NSURL
содержащие три косые черты?
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()
используется для преобразования простого пути к файлу (например, «/ путь / к / файлу») в URL-адрес. ВыurlString
это полный URL строки , включая схемы, так что вы должны использоватьlet url = NSURL(string: urlstring)
чтобы преобразовать его обратно в
NSURL
. Пример: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
источник
URL(string: urlstring)
В Swift 4 и Swift 3 , для преобразования строки в URL:
URL(string: String)
или,
URL.init(string: "yourURLString")
И чтобы преобразовать URL в строку:
URL.absoluteString
Тот, что ниже, преобразует "содержимое" URL-адреса в строку
String(contentsOf: URL)
источник
String(contentsOf: URL)
возвращает фактическую полезную нагрузку этого ресурса, а не URL-адрес в строковом формате. ИспользуйтеURL.absoluteString
для получения строковой версии URL-адреса. developer.apple.com/reference/foundation/nsurl/…В Swift есть более удобный способ получить строковую версию пути из NSURL:
let path:String = url.path
источник
/questions/27062454/converting-url-to-string-and-back-again
для url/programming/27062454/converting-url-to-string-and-back-again
file://
формат.ВНИМАНИЕ : обратите внимание на url, это
optional
и может бытьnil
. Вы можете заключить URL-адрес в кавычки, чтобы преобразовать его в строку. Можете опробовать на детской площадке.Обновление для Swift 5, Xcode 11:
import Foundation let urlString = "http://ifconfig.me" // string to url let url = URL(string: urlString) //url to string let string = "\(url)" // if you want the path without `file` schema // let string = "\(url.path)"
источник
file:///Users/foo
). Хотя, если требуется только абсолютный путь (подумайте/Users/foo
), егоurl.path
следует использовать, как в ответе @ iphaaw ниже.let url = URL(string: "URLSTRING HERE") let anyvar = String(describing: url)
источник
Swift 3 (забудьте про NSURL).
let fileName = "20-01-2017 22:47" let folderString = "file:///var/mobile/someLongPath"
Чтобы сделать URL из строки:
let folder: URL? = Foundation.URL(string: folderString) // Optional<URL> // ▿ some : file:///var/mobile/someLongPath
Если мы хотим добавить имя файла. Обратите внимание, что appendingPathComponent () автоматически добавляет процентную кодировку:
let folderWithFilename: URL? = folder?.appendingPathComponent(fileName) // Optional<URL> // ▿ some : file:///var/mobile/someLongPath/20-01-2017%2022:47
Когда мы хотим иметь String, но без корневой части (обратите внимание, что процентное кодирование удаляется автоматически):
let folderWithFilename: String? = folderWithFilename.path // ▿ Optional<String> // - some : "/var/mobile/someLongPath/20-01-2017 22:47"
Если мы хотим сохранить корневую часть, мы делаем это (но учтите процентную кодировку - она не удаляется):
let folderWithFilenameAbsoluteString: String? = folderWithFilenameURL.absoluteString // ▿ Optional<String> // - some : "file:///var/mobile/someLongPath/20-01-2017%2022:47"
Чтобы вручную добавить процентную кодировку для строки:
let folderWithFilenameAndEncoding: String? = folderWithFilename.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) // ▿ Optional<String> // - some : "/var/mobile/someLongPath/20-01-2017%2022:47"
Чтобы удалить процентное кодирование:
let folderWithFilenameAbsoluteStringNoEncodig: String? = folderWithFilenameAbsoluteString.removingPercentEncoding // ▿ Optional<String> // - some : "file:///var/mobile/someLongPath/20-01-2017 22:47"
Процентное кодирование важно, потому что они нужны URL-адресам для сетевых запросов, а URL-адреса файловой системы не всегда работают - это зависит от фактического метода, который их использует. Предостережение здесь в том, что они могут быть удалены или добавлены автоматически, поэтому лучше тщательно отлаживайте эти преобразования.
источник
Код версии Swift 3:
let urlString = "file:///Users/Documents/Book/Note.txt" let pathURL = URL(string: urlString)! print("the url = " + pathURL.path)
источник
2020 | SWIFT 5.1:
От STRING до URL:
let url = URL(fileURLWithPath: "//Users/Me/Desktop/Doc.txt")
С URL на STRING:
let a = String(describing: url) // "file:////Users/Me/Desktop/Doc.txt" let b = "\(url)" // "file:////Users/Me/Desktop/Doc.txt" let c = url.absoluteString // "file:////Users/Me/Desktop/Doc.txt" let d = url.path // "/Users/Me/Desktop/Doc.txt"
НО значение
d
будет невидимым из-за процесса отладки, поэтому ...ЛУЧШЕЕ РЕШЕНИЕ:
let e = "\(url.path)" // "/Users/Me/Desktop/Doc.txt"
И расширение для
URL?
extension Optional where Wrapped == URL { func toString() -> String { guard let val = self else { return "" } return "\(val.path)" } }
Применение:
let str = optionalUrl.toString() // "/Users/Me/Desktop/Doc.txt" str = emptyOptionalUrl.toString() // ""
источник
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 } }
источник
Свифт 5.
Чтобы преобразовать a
String
в aURL
:let stringToURL = URL(string: "your-string")
Чтобы преобразовать a
URL
в aString
:let urlToString = stringToURL?.absoluteString
источник