Swift 中的 URL 到字串的轉換及反向轉換


在 Swift 中,您可以使用 URL 的 absoluteString 屬性將 URL 轉換為字串。要將字串轉換為 URL,您可以使用 URL(string:) 初始化器。在本文中,您將看到許多關於如何將 URL 轉換為字串以及反向轉換的示例。

示例 1:將 URL 轉換為字串以及反向轉換

使用 absoluteString 屬性將 URL 轉換為字串,並使用 URL(string:) 初始化器將字串轉換為 URL。它還提到 URL(string:) 初始化器返回一個可選的 URL 值,應檢查其是否為 nil。

import Foundation
let url = URL(string: "https://www.example.com")
let urlString = url?.absoluteString
print("URL String: \(String(describing:  urlString))")

輸出

URL String: Optional("https://www.example.com")

這就是如何將字串轉換為 URL 的方法。

import Foundation
let urlString = "https://www.example.com"
if let url = URL(string: urlString) {
   print("URL Object: \(url)")
} else {
   print("Invalid URL")
}

輸出

URL Object: https://www.example.com

示例 2

將 URL 轉換為字串時,生成的字串將包括方案(例如“https://”)以及任何查詢引數或片段。例如,

import Foundation
let url = URL(string: "https://www.example.com/search?q=swift#results")
let urlString = url?.absoluteString
print("URL String: \(String(describing: urlString))")

輸出

URL String: Optional("https://www.example.com/search?q=swift#results")

示例 3:處理 URL 字串中的特殊字元

如果要轉換的 URL 字串包含 URL 中無效的字元(例如空格),則需要先使用 addingPercentEncoding(withAllowedCharacters:) 方法對其進行百分比編碼。例如 -

import Foundation
let urlString = "https://www.example.com/search?q=hello world"
if let encodedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
   let url = URL(string: encodedString) {
   print("URL Object: \(url)")
} else {
   print("Invalid URL")
}

輸出

URL Object: https://www.example.com/search?q=hello%20world

示例 4

如果您正在處理包含非 ASCII 字元(例如重音字母)的 URL,則應改用 URL(string:addingPercentEncodingWithAllowedCharacters:) 初始化器。這將自動對 URL 中的任何非 ASCII 字元進行百分比編碼。例如 -

import Foundation
let urlString = "https://www.example.com/français"
if let url = URL(string: urlString.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)!,
                 relativeTo: nil) {
   print("URL Object: \(url)")
} else {
   print("Invalid URL")
}

輸出

URL Object: https://www.example.com/fran%C3%A7ais

示例 5:從 URL 字串獲取基本 URL

要僅獲取基本 URL(即不包括方案或任何查詢引數或片段),可以使用 URL 的 host 屬性。例如 -

import Foundation
let url = URL(string: "https://www.example.com/search?q=swift#results")
let baseUrlString = url?.host
print("Base URL: \(String(describing: baseUrlString))")

輸出

Base URL: Optional("www.example.com")

示例 6:使用 URLComponents 修改 URL

要修改 URL,您可以使用 URLComponents 結構建立原始 URL 的副本,修改所需的元件(例如查詢引數),然後從修改後的元件建立新的 URL。例如 -

import Foundation
var urlComponents = URLComponents(string: "https://www.example.com/search")!
urlComponents.queryItems = [
   URLQueryItem(name: "q", value: "swift"),
   URLQueryItem(name: "limit", value: "10")
]
if let url = urlComponents.url {
   print("URL String: \(url.absoluteString)")
} else {
   print("Something is wrong with URL.")
}

輸出

URL String: https://www.example.com/search?q=swift&limit=10

示例 7:處理具有非標準方案的 URL

如果您需要處理具有非標準方案(例如電話號碼的“tel:”或電子郵件地址的“mailto:”)的 URL,則可以使用 UIApplication 類的 canOpenURL(_:) 方法檢查裝置是否可以處理指定的 URL 方案,然後使用 open(_:) 方法開啟 URL。例如 -

import UIKit
let phoneNumber = "+1234567890"
if let url = URL(string: "tel:\(phoneNumber)"), UIApplication.shared.canOpenURL(url) {
   UIApplication.shared.open(url)
} else {
   print("Invalid phone number or unsupported URL scheme")
}

輸出

Invalid phone number or unsupported URL scheme

結論

總之,Swift 提供了多種與各種 URL 元件互動以及在字串和 URL 之間進行轉換的方法。雖然 String 類具有用於對文字進行百分比編碼和解碼以在 URL 中使用的方法,但 URL 和 URLComponents 類提供了一系列可用於解析、編輯和構建 URL 的屬性和方法。Swift 對 URL 的處理使您可以建立強大的應用程式,這些應用程式可以與線上服務互動、顯示 Web 內容以及處理各種基於 URL 的功能。

更新於: 2023年5月4日

2K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.