首页 > 解决方案 > 字符中的 == 是如何定义的?

问题描述

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

for的文档继承自它的规则,并没有解释它的规则。另一方面,我环顾了附件#29,但运气不佳。Swift 是否实现了自己的逻辑?==CharacterEquatable

无论哪种情况,Swift 中的字符相等性是如何确定的?

标签: swiftunicodeequatablegrapheme-cluster

解决方案


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

Character 你可以在这里找到相等运算符。

extension Character: Equatable {
  @inlinable @inline(__always)
  @_effects(readonly)
  public static func == (lhs: Character, rhs: Character) -> Bool {
    return lhs._str == rhs._str
  }
}

如您所见,在内部,Character可以从 a 初始化,String并且==操作符 forCharacter使用该内部String属性来比较两个Characters。

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

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

你可以在StringComparable.swift==中找到for的实现String


推荐阅读