web-dev-qa-db-ja.com

URLを文字列に変換してまた戻る

だから私はNSURLStringに変換しました。だから私は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
106
Gary Simpson

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

Swift 4およびSwiftStringをURLに変換するには、

URL(string: String)

または、

URL.init(string: "yourURLString")

URLを文字列に変換するには、

URL.absoluteString

下のはURLの 'contents'を文字列に変換します

String(contentsOf: URL)
113
Naishta

SwiftでNSURLから文字列バージョンのパスを取得するより良い方法があります。

let path:String = url.path
63
iphaaw

更新:URLに注意を払う、それはこの例ではゼロにすることができます。あなたのURLを文字列に変換するために引用符で囲むことができます

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)
13
Ahsan

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はそれらを必要とします。それはそれらを使用する実際の方法によって異なります。ここでの注意点は、それらが自動的に削除または追加される可能性があることですので、これらの変換を慎重にデバッグしてください。

13
Vitalii

Swift 3のバージョンコード:

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

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
    }

}
1
Raj Joshi