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.