在 Swift 中将 URL 转换为字符串并再转换回来

swiftserver side programmingprogramming

在 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 的功能。


相关文章