Swift 如何在字符中定义==?

Swift 如何在字符中定义==?,swift,unicode,equatable,grapheme-cluster,Swift,Unicode,Equatable,Grapheme Cluster,我看到“é”(“\u{E9}”,1个代码点)和“e”+急性(“\u{65}\u{301}”,2个代码点)是相等的,这很好 字符的==格式继承自equalable,不解释其规则。另一方面,我环顾四周,运气不佳。Swift是否实现了自己的逻辑 在这两种情况下,如何在Swift中确定字符相等性?由于Swift是一种开放源代码语言,您可以在GitHub上检查内置方法的实现 您可以找到字符的相等运算符 如您所见,在内部,字符可以从字符串初始化,而字符的==操作符使用该内部字符串属性来比较两个字符 @fro

我看到“é”(
“\u{E9}”
,1个代码点)和“e”+急性(
“\u{65}\u{301}”
,2个代码点)是相等的,这很好

字符
==
格式继承自
equalable
,不解释其规则。另一方面,我环顾四周,运气不佳。Swift是否实现了自己的逻辑


在这两种情况下,如何在Swift中确定字符相等性?

由于
Swift
是一种开放源代码语言,您可以在GitHub上检查内置方法的实现

您可以找到
字符
的相等运算符

如您所见,在内部,
字符
可以从
字符串
初始化,而
字符
==
操作符使用该内部
字符串
属性来比较两个
字符

@frozen
public struct Character {
  @usableFromInline
  internal var _str: String

  @inlinable @inline(__always)
  internal init(unchecked str: String) {
    self._str = str
    _invariantCheck()
  }
}

您可以在

中找到
=
for
String
的实现,我认为您未询问的问题的答案是,“您需要先手动规范化两个字符”。
@frozen
public struct Character {
  @usableFromInline
  internal var _str: String

  @inlinable @inline(__always)
  internal init(unchecked str: String) {
    self._str = str
    _invariantCheck()
  }
}