[=如何定义字符?

问题描述 投票:-2回答:2

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

documentation==Character继承自Equatable,因此不解释其规则。另一方面,我在Annex #29周围没有运气。 Swift是否实现自己的逻辑?

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

swift unicode equatable grapheme-cluster
2个回答
2
投票

由于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()
  }
}

您可以在==中找到StringStringComparable.swift的实现


0
投票

我不知道它是开源的!我才刚刚开始学习Swift,所以我无法掌握一切。您链接的文件只是一个外观,您需要向下浏览以执行不同的相关代码,这些代码执行特殊情况,最后回退到实际的通用算法。

我还无法到达代码的绝对边界,但是根据许多名称,似乎至少将最通用的逻辑委派给了ICU C库。

© www.soinside.com 2019 - 2024. All rights reserved.