代码之家  ›  专栏  ›  技术社区  ›  natevw

从swift中的类型别名重写调用字符串相等运算符

  •  0
  • natevw  · 技术社区  · 7 年前

    我希望有一个便宜的字符串类型,可以对某些“特殊字符串”进行特殊比较。但是,以下代码以无限递归结束:

    typealias SpecialString = String
    private extension SpecialString {
        var normalized: String {
            return lowercased().replacingOccurrences(of: " ", with: "")
        }
    
        static func ==(lhs: SpecialString, rhs: SpecialString) -> Bool {
            return lhs.normalized == rhs.normalized
        }
    }
    
    assert(SpecialString("A B C") == SpecialString("abc"))
    

    是否可以强制使用 String.== 运算符在我自己的比较实现中?或者这是一个不可避免的限制吗? typealias 作品?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alexander    7 年前

    恐怕目前不可能。类型别名是指向类型的透明别名。 SpecialString String 完全等同于类型系统。

    你能做的最接近的事就是做一个新的 特殊字符串 包装,包装 ,将只读视图公开到包装后的字符串中,并实现所需的任何自定义方法。这也有助于 特殊字符串 符合 CustomDebugStringConvertible CustomStringDescribable .

    推荐文章