我希望有一个便宜的字符串类型,可以对某些“特殊字符串”进行特殊比较。但是,以下代码以无限递归结束:
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 作品?
String.==
typealias
恐怕目前不可能。类型别名是指向类型的透明别名。 SpecialString 和 String 完全等同于类型系统。
SpecialString
String
你能做的最接近的事就是做一个新的 特殊字符串 包装,包装 弦 ,将只读视图公开到包装后的字符串中,并实现所需的任何自定义方法。这也有助于 特殊字符串 符合 CustomDebugStringConvertible 和 CustomStringDescribable .
特殊字符串
弦
CustomDebugStringConvertible
CustomStringDescribable