代码之家  ›  专栏  ›  技术社区  ›  Alec O

重写url的公共初始值设定项

  •  1
  • Alec O  · 技术社区  · 8 年前

    我想重写一个类似结构的url的公共初始值设定项。目前,我能找到的最佳实现是在URL扩展中定义类似的初始值设定项,如下所示:

    extension URL {
    
         init?(_ string: String) {
    
            if let url = URL(string: string) {
                self = url
                // insert additional code here
            } else {
                return nil
            }
        }
    
    }
    

    消极的是我必须替换 URL(string: String) 在我的申请中 URL(string) . 我可以刷一下初始化器,但那不是很快友好。唯一的另一个选择是对url进行子类划分,但这再次意味着我必须替换应用程序中url的每个实例。还有其他想法吗?

    注意:我这样做是为了跟踪每一个不安全的实例 http 我的应用程序中的URL,以便我们可以准备切换到 https 没有丢失任何域。

    1 回复  |  直到 8 年前
        1
  •  2
  •   R.B.    8 年前

    你不能像你说的那样重写初始值设定项。自从 URL 是一个 struct ,不能将其子类化。即使你可以,我也不推荐。

    您在扩展中添加的初始值设定项似乎是一个很好的解决方案。

    extension URL {
       init?(_ string: String) { /*...*/ }
    }