Swift 重写URL的公共初始值设定项
我想为类似结构的URL重写公共初始值设定项。目前,我能找到的最佳实现是在URL扩展中定义类似的初始值设定项,如下所示:Swift 重写URL的公共初始值设定项,swift,Swift,我想为类似结构的URL重写公共初始值设定项。目前,我能找到的最佳实现是在URL扩展中定义类似的初始值设定项,如下所示: extension URL { init?(_ string: String) { if let url = URL(string: string) { self = url // insert additional code here } else { ret
extension URL {
init?(_ string: String) {
if let url = URL(string: string) {
self = url
// insert additional code here
} else {
return nil
}
}
}
负面影响是我必须用URL(string)
替换应用程序中URL(string)
的每个实例。我可以痛骂初始化者,但那不是很快。唯一的其他选择是将URL子类化,但这同样意味着我必须替换应用程序中URL的每个实例。还有其他想法吗
注意:我这样做是为了跟踪我的应用程序中不安全的
http
URL的每个实例,这样我们就可以准备切换到https
,而不会丢失任何域。您将无法像您所说的那样覆盖初始值设定项。由于URL
是一个struct
,因此不能将其子类化。即使你可以,我也不推荐
您在扩展中添加的初始值设定项似乎是一个很好的解决方案
extension URL {
init?(_ string: String) { /*...*/ }
}
URL
是一个struct
——您不能对它进行子类化,也不能随意更改它的方法。这似乎是一个非常糟糕的主意URL
是一个数据持有者,我真的无法想象您想在那里添加什么功能。理想情况下,最好的解决方案是将任何内容包装在自定义函数/方法中。是的,你必须在任何地方更新使用情况,但这是正确的做法。如果这些是你应用程序中的http
URL,为什么不在代码中搜索http:
找到它们呢?@RobNapier在大型项目中URL并不总是存储在应用程序中。我们有为图像或其他数据提供URL的内部和外部服务/API。您尝试使用URL
是不可能的,而且非常脆弱(有很多东西它无法捕获,例如在软件的其他级别生成的URL)。解决此问题的更好方法是使用Charles()之类的代理或Wireshark之类的嗅探器来监视应用程序实际建立的所有连接。我还将研究如何限制您对少量可以为您执行日志记录的对象的网络访问。我还将在URL进入系统时(而不是每次使用时)明确检查URL。