【发布时间】:2021-03-02 02:35:00
【问题描述】:
假设,我有以下 URL:https://something.com/room/order/12345555/product/543333?is_correct=true。这是一种深度链接,我应该解析它的参数并显示一些 ViewController。我对 12345555、543333 和 true 等值感兴趣。其实很容易得到这些参数。
为了得到 12345555 或 543333,我们可以使用返回 ["/", "room", "order", "12345555", "product", "543333"] 的 URL 的 pathComponents。要获取查询项(is_correct: true),我们可以使用 URLComponents。一切都清晰而简单。
但假设我的链接包含# 作为路径https://something.com/room/#/order/12345555/product/543333?is_correct=true。现在,对于这个链接,pathComponents 只返回["/", "room"] 忽略其他所有内容。当然,查询参数也有问题。
为什么# 符号会如此影响?我该如何解决问题?我应该用某些东西替换# 还是 Swift 中的URL 包含一些辅助方法?谢谢。
【问题讨论】:
-
#符号代表URL fragment -
你的意思是如果我调用
url.fragment,它会返回#之后的所有内容? -
问题是
url.fragment返回字符串,基本上你不能使用像pathComponents和URLComponents这样方便的东西 -
您是否正在处理
room/#/order和room/order可以或多或少互换使用的情况?如果是这样的话,.replacingOccurrences(of: "/#/", with: "/")可能是转型的合理第一步。否则,您可以执行let fragmentUrl = URL(string: url.fragment!, relativeTo: url)!之类的操作来获取#之后的内容