[我看到“é”("\u{E9}"
,1个代码点)和“ e” +急性("\u{65}\u{301}"
,2个代码点)相等,很好。
documentation的==
的Character
继承自Equatable
,因此不解释其规则。另一方面,我在Annex #29周围没有运气。 Swift是否实现自己的逻辑?
无论哪种情况,在Swift中如何确定字符相等性?
由于Swift
是一种开源语言,因此您可以在GitHub上检查内置方法的实现。
您可以找到Character
here的相等运算符。
extension Character: Equatable {
@inlinable @inline(__always)
@_effects(readonly)
public static func == (lhs: Character, rhs: Character) -> Bool {
return lhs._str == rhs._str
}
}
如您所见,在内部,可以从Character
初始化String
,并且==
的Character
运算符使用该内部String
属性比较两个Character
。
@frozen
public struct Character {
@usableFromInline
internal var _str: String
@inlinable @inline(__always)
internal init(unchecked str: String) {
self._str = str
_invariantCheck()
}
}
您可以在==
中找到String
的StringComparable.swift的实现
我不知道它是开源的!我才刚刚开始学习Swift,所以我无法掌握一切。您链接的文件只是一个外观,您需要向下浏览以执行不同的相关代码,这些代码执行特殊情况,最后回退到实际的通用算法。
我还无法到达代码的绝对边界,但是根据许多名称,似乎至少将最通用的逻辑委派给了ICU C库。