Как определяется == в Символе? - PullRequest
0 голосов
/ 14 апреля 2020

Я вижу, что "é" ("\u{E9}", 1 кодовая точка) и "e" + острый ("\u{65}\u{301}", 2 кодовых пункта) равны, что здорово.

документация из == для Character унаследована от Equatable и не объясняет его правил. С другой стороны, я безуспешно огляделся Приложение # 29 . Swift реализует свою собственную логику c?

В любом случае, как определяется равенство символов в Swift?

1 Ответ

2 голосов
/ 14 апреля 2020

Поскольку 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 можно инициализировать из String, а оператор == для Character использует это внутреннее свойство String для сравнения двух Character s.

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

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

Вы можете найти реализацию == для String в StringComparable.swift

...