在 Swift 中将 URL 转换为字符串并再转换回来
在 Swift 中,您可以使用 URL 的 absoluteString 属性将 URL 转换为字符串。要将字符串转换为 URL,您可以使用 URL(string:) 初始化程序。在本文中,您将看到许多有关如何将 URL 转换为字符串和反之亦然的不同示例。
示例 1:将 URL 转换为字符串和反之亦然
要使用 absoluteString 属性将 URL 转换为字符串并将字符串转换为 URL,您可以使用 URL(string:) 初始化程序。它还提到 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 中无效的字符(例如空格),则需要先使用 creatingPercentEncoding(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
如果您使用的 URL 包含非 ASCII 字符(例如重音字母),则应改用 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 的主机属性。例如 −
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
如果您需要处理具有非标准方案的 URL(例如电话号码的"tel:"或电子邮件地址的"mailto:"),您可以使用 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("无效的电话号码或不支持的 URL 方案") }
输出
无效的电话号码或不支持的 URL 方案
结论
总之,Swift 提供了多种与各种 URL 组件交互以及在字符串和 URL 之间转换的方法。虽然 String 类具有用于 URL 的百分比编码和解码文本的方法,但 URL 和 URLComponents 类提供了一系列可用于解析、编辑和构造 URL 的属性和方法。 Swift 对 URL 的处理使您能够创建强大的应用程序,这些应用程序可以与在线服务交互、显示 Web 内容并处理各种基于 URL 的功能。