URL을 문자열로 변환 한 후 다시 변환


141

그래서를로 변환 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

Swift 5에서 문자열을 url로 변환하는 것은 Foundation.URL (string : "")입니다.
Kanishk Gupta

답변:


122

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

9
우수한. 또는 지금 스위프트에서 :URL(string: urlstring)
브렌트 파우스트

1
"urlstring.removingWhitespaces ()"가 필요할 수 있습니다. URL (문자열에 공백이있을 때 작업 할 수있는 용량이 없기 때문입니다.
Carlos Parada

147

에서 스위프트 4스위프트 3 , URL로 문자열을 변환하려면 :

URL(string: String)

또는,

URL.init(string: "yourURLString")

그리고 URL을 문자열로 변환하려면 :

URL.absoluteString

아래 의 것은 URL의 '내용'을 문자열로 변환합니다.

String(contentsOf: URL)

25
두 번째 부분이 잘못되었습니다. String(contentsOf: URL)문자열 형식의 URL이 아니라 해당 리소스의 실제 페이로드를 반환합니다. URL.absoluteStringURL의 문자열 버전을 얻는 데 사용하십시오 . developer.apple.com/reference/foundation/nsurl/…
Tomislav Markovski

4
stackoverflow.com/a/39967995/2227743 에서 와 동일한 실수를합니다. 여기서 다운로드 한 콘텐츠를 문자열로 변환하여 URL 자체를 문자열로 변환하는 것을 혼란스럽게합니다. 답변의이 부분은 완전히 틀 렸기 때문에 (또는 주제를 벗어난 것이지만 결국 질문에 대답하지 않기 때문에 잘못되었습니다)이 부분을 제거해야합니다.
Eric Aya

1
35 명 이상이이 정보를 유용하고 공감했습니다. 오히려 그대로 유지하겠습니다.
Naishta

72

Swift의 NSURL에서 문자열 버전의 경로를 얻는 더 좋은 방법이 있습니다.

let path:String = url.path

5
하지만 그것은 /questions/27062454/converting-url-to-string-and-back-againURL에 대해서만 반환됩니다/programming/27062454/converting-url-to-string-and-back-again
Lalit Kumar

1
문자열 경로가 필요한 다른 FileManager 메소드의 경로를 사용하려는 경우 실제로 유용합니다. 그들은 file://형식을 좋아하지 않습니다 .
벤 바론

29

주의 사항 : 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)"

1
이것은 스키마 접두사 (think file:///Users/foo) 도 반환한다는 점에 유의해야합니다 . 절대 경로 만 필요한 경우 (think /Users/foo) url.path아래의 @iphaaw의 답변과 같이 사용해야합니다.
Ahmed Khalaf

16
let url = URL(string: "URLSTRING HERE")
let anyvar =  String(describing: url)

14

스위프트 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

파일 이름을 추가하려면 pathComponent ()를 추가하면 퍼센트 인코딩이 자동으로 추가됩니다.

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이 필요하기 때문에 퍼센트 인코딩은 중요하지만 파일 시스템에 대한 URL은 항상 작동하지는 않습니다. URL을 사용하는 실제 방법에 따라 다릅니다. 여기서주의 할 사항은 자동으로 제거되거나 추가 될 수 있으므로 이러한 변환을 신중하게 디버그하는 것이 좋습니다.


9

스위프트 3 버전 코드 :

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

4

2020 | 스위프트 5.1 :

let url = URL(fileURLWithPath: "//Users/Me/Desktop/Doc.txt")

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" 
// BUT value of `d` will be invisible due to debug process, so...
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() // ""

1

UIWebViewDelegate와 함께 사용되는 스위프트 3 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
    }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.