Ответ 1
isKindOfClass()
, из NSObjectProtocol является эквивалентом ключевого слова java instanceof, в java это ключевое слово, но в swift это метод протокола, но они ведут себя аналогично и используются в аналогичных контекстах.
isKindOfClass:
возвращает YES, если приемник является экземпляром указанный класс или экземпляр любого класса, который наследуется от указанного класса.
Это именно то, что имеет ключевое слово instanceof в Java связанная ссылка
Пример:
let a: A = A()
let isInstanceOfA: Bool = a.isKindOfClass(A) // returns true.
Также вы можете использовать ключевое слово is
let a: A = A()
let isInstanceOfA: Bool = a is A
Разница:
-
is
работает с любым классом в Swift, тогда какisKindOfClass()
работает только с теми классами, которые являются подклассамиNSObject
или иным образом реализуетNSObjectProtocol
. -
is
принимает тип, который должен быть жестко закодирован во время компиляции.isKindOfClass:
принимает выражение, значение которого может быть вычислено во время выполнения.
Итак, ключевое слово is
не работает, как instanceof