所以我把一个转换成了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
Run Code Online (Sandbox Code Playgroud)
Nai*_*hta 128
在Swift 4和Swift 3中, 要将String转换为URL:
URL(string: String)
Run Code Online (Sandbox Code Playgroud)
要么,
URL.init(string: "yourURLString")
Run Code Online (Sandbox Code Playgroud)
并将URL转换为String:
URL.absoluteString
Run Code Online (Sandbox Code Playgroud)
下面的一个将url的'contents'转换为string
String(contentsOf: URL)
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 111
fileURLWithPath()用于将普通文件路径(例如"/ path/to/file")转换为URL.您urlString是包含该方案的完整URL字符串,因此您应该使用
let url = NSURL(string: urlstring)
Run Code Online (Sandbox Code Playgroud)
把它转换回来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
Run Code Online (Sandbox Code Playgroud)
iph*_*aaw 67
有一种更好的方法从Swift中的NSURL获取路径的字符串版本:
let path:String = url.path
Run Code Online (Sandbox Code Playgroud)
Rog*_*ger 24
更新:注意网址,在这个例子中可以是零.您可以将您的网址包装在引号中以将其转换为字符串
let urlString = "http://ifconfig.me"
//string to url
let url = NSURL(string: urlString)
//url to string
let string = "\(url)"
Run Code Online (Sandbox Code Playgroud)
And*_*rew 21
2020 | 斯威夫特 5.1:
//ver 1
let url = URL(fileURLWithPath: "//Users/Me/Desktop/Doc.txt")
//ver 2
let url = URL(string:"//Users/Me/Desktop/Doc.txt")
//for folders
let url = URL(fileURLWithPath: "//Users/Me/Desktop", isDirectory: true)
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
但是d由于调试过程,的值将不可见,所以......
本地文件的最佳解决方案是:
let e = "\(url.path)" // "/Users/Me/Desktop/Doc.txt"
Run Code Online (Sandbox Code Playgroud)
网络地址的最佳解决方案是:
let c = url.absoluteString
Run Code Online (Sandbox Code Playgroud)
.path将仅返回/questions/27062454/converting-url-to-string-and-back-againhttp(s) url,/sf/ask/1894371811/因此对于 http(s) url 更好地使用url.absoluteString
小智 14
let url = URL(string: "URLSTRING HERE")
let anyvar = String(describing: url)
Run Code Online (Sandbox Code Playgroud)
Vit*_*lii 13
Swift 3(忘了NSURL).
let fileName = "20-01-2017 22:47"
let folderString = "file:///var/mobile/someLongPath"
Run Code Online (Sandbox Code Playgroud)
要从字符串中创建URL:
let folder: URL? = Foundation.URL(string: folderString)
// Optional<URL>
// ? some : file:///var/mobile/someLongPath
Run Code Online (Sandbox Code Playgroud)
如果我们要添加文件名.注意,appendingPathComponent()会自动添加百分比编码:
let folderWithFilename: URL? = folder?.appendingPathComponent(fileName)
// Optional<URL>
// ? some : file:///var/mobile/someLongPath/20-01-2017%2022:47
Run Code Online (Sandbox Code Playgroud)
当我们想要String而没有root部分时(注意自动删除百分比编码):
let folderWithFilename: String? = folderWithFilename.path
// ? Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017 22:47"
Run Code Online (Sandbox Code Playgroud)
如果我们想要保留根部分,我们会这样做(但请注意编码百分比 - 它不会被删除):
let folderWithFilenameAbsoluteString: String? = folderWithFilenameURL.absoluteString
// ? Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017%2022:47"
Run Code Online (Sandbox Code Playgroud)
要手动添加字符串的百分比编码:
let folderWithFilenameAndEncoding: String? = folderWithFilename.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
// ? Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017%2022:47"
Run Code Online (Sandbox Code Playgroud)
要删除百分比编码:
let folderWithFilenameAbsoluteStringNoEncodig: String? = folderWithFilenameAbsoluteString.removingPercentEncoding
// ? Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017 22:47"
Run Code Online (Sandbox Code Playgroud)
百分比编码很重要,因为网络请求的URL需要它们,而文件系统的URL并不总是有效 - 它取决于使用它们的实际方法.这里需要注意的是,它们可能会被自动删除或添加,因此请仔细调试这些转换.
Swift 3版本代码:
let urlString = "file:///Users/Documents/Book/Note.txt"
let pathURL = URL(string: urlString)!
print("the url = " + pathURL.path)
Run Code Online (Sandbox Code Playgroud)
斯威夫特 5.
将 a 转换String为 a URL:
let stringToURL = URL(string: "your-string")
Run Code Online (Sandbox Code Playgroud)
将 a 转换URL为 a String:
let urlToString = stringToURL?.absoluteString
Run Code Online (Sandbox Code Playgroud)