Swift 宏用于 URL 而不是运行时验证的优势?

Advantage of Swift macro for URL instead of runtime validation?

提问人:Christian B 提问时间:10/4/2023 最后编辑:Dávid PásztorChristian B 更新时间:10/4/2023 访问量:176

问:

在这里这里阅读 Swift 5.9 中的新 Swift 宏,似乎在编译时创建一个宏来评估 URL 有效性是一个常见的例子。

在编译时而不是运行时检查 URL 有效性有什么好处?考虑到,根据设计,使用 Swift 语言,我们习惯于在运行时检查它。我认为这是因为 URL 是动态的,可以随时从有效变为无效,反之亦然。

实例化 URL 将起作用,我认为它可以在编译时检查,但是如果一个不太常见的 URL 稍后在运行时变得无效怎么办?URL("https://www.google.com")!

谢谢!

swift-宏 swift5.9

评论


答:

3赞 Dávid Pásztor 10/4/2023 #1

您似乎误解了 URL 验证在 Swift 中的作用。

初始值设定项检查提供的字符串结构是否有效 - 这意味着它不包含任何无效字符(例如需要在 URL 中转义的空格等)。URL(string:)URL

初始值设定项不会检查是否实际指向现有地址。如果不向该地址发出网络请求,甚至是不可能的,即使如此,请求是否成功也不是地址是否有效的明确信号 - 您可能在客户端或服务器端遇到连接问题。URLURL

因此,对硬编码 URL 的编译时检查是完全安全的,因为一旦实例化了 ,就无法更改其底层地址。URL

链接文章中建议的宏只是检查初始值设定项是否使用指定的 URL 字符串成功 - 它们也不会进行任何额外的验证。URL(string:)