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

그래서를로 변환 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()일반 파일 경로 (예 : “/ 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


답변

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

URL(string: String)

또는,

URL.init(string: "yourURLString")

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

URL.absoluteString

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

String(contentsOf: URL)


답변

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

let path:String = url.path


답변

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


답변

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


답변

스위프트 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을 사용하는 실제 방법에 따라 다릅니다. 여기서주의 할 사항은 자동으로 제거되거나 추가 될 수 있으므로 이러한 변환을 신중하게 디버그하는 것이 좋습니다.


답변

스위프트 3 버전 코드 :

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