Swift 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
ถ้าเราต้องการเพิ่มชื่อไฟล์ โปรดทราบว่า appendingPathComponent () จะเพิ่มการเข้ารหัสเปอร์เซ็นต์โดยอัตโนมัติ:
let folderWithFilename: URL? = folder?.appendingPathComponent(fileName)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath/20-01-2017%2022:47
เมื่อเราต้องการให้มีสตริง แต่ไม่มีส่วนรูท (โปรดทราบว่าการเข้ารหัสเปอร์เซ็นต์จะถูกลบโดยอัตโนมัติ):
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 ไปยังระบบไฟล์จะไม่ทำงานเสมอไปขึ้นอยู่กับวิธีการจริงที่ใช้ คำเตือนที่นี่คือพวกเขาอาจถูกลบหรือเพิ่มโดยอัตโนมัติดังนั้นดีกว่า debug การแปลงเหล่านี้อย่างระมัดระวัง