Почему type (of: object) == ClassName.self возвращает неправильный результат? - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть следующий код:

class Mode { ... }
class TimelapseMode: Mode { ... }
var mode: Mode! = TimelapseMode()

Когда я проверяю type(of: mode) == TimelapseMode.self, он возвращает false, что, очевидно, неправильно.Я подтвердил, установив точку останова и режим печати, это действительно TimelapseMode.

Однако type(of: mode) === TimelapseMode.self и mode is TimelapseMode оба возвращают истину.

Это то, что оператор == не являетсяПравильно ли реализован класс метатипа?

Должен ли я пройти через весь код, заменив такое использование == на ===?

1 Ответ

0 голосов
/ 22 декабря 2018

Type.self Метатип типа можно найти, вызвав .self для типа.Возвращаемый тип может быть мета-типом Class, мета-типом Struct или мета-типом Protocol.

class Mode {

}


class TimeslapeMode: Mode {

}

var mode: Mode = Mode()

print(type(of: mode))
print(TimeslapeMode.self)

print(type(of: mode) === TimeslapeMode.self)
print(type(of: mode) == TimeslapeMode.self)

print(type(of: mode))
print(type(of: TimeslapeMode.self))

Output -
Mode
TimeslapeMode
false
false
Mode
TimeslapeMode.Type

enter image description here

...