だから私はNSURL
をString
に変換しました。だから私はprintln
ならfile:///Users/...
などのように見えます。
後でこれをNSURL
として戻したいので、以下のように変換し直してみますが、上記の文字列バージョンに現れる2つのスラッシュをなくし、url
が無効であるためコードが壊れます。
NSURL
に変換し直してString
から2つのスラッシュを削除し、3つのフォワードスラッシュを含む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()
は普通のファイルパス(例えば "/ path/to/file")を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
Swift 4およびSwift、StringをURLに変換するには、
URL(string: String)
または、
URL.init(string: "yourURLString")
URLを文字列に変換するには、
URL.absoluteString
下のはURLの 'contents'を文字列に変換します
String(contentsOf: URL)
SwiftでNSURLから文字列バージョンのパスを取得するより良い方法があります。
let path:String = url.path
更新:URLに注意を払う、それはこの例ではゼロにすることができます。あなたのURLを文字列に変換するために引用符で囲むことができます
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(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)
Swift 3は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
}
}