Что эквивалентно java instanceof в Swift?

Как и java instanceOf ключевое слово whats эквивалент в Swift?

Пример java:

A a = new A();
boolean isInstanceOfA = a instanceof A;

Здесь isInstanceOfA истинно

Мне нужно что-то подобное в Swift

Ответ 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

Ответ 2

let a = A()
let isInstanceOfA = a is A

Ответ 3

Для swift3 это:

if someInstance is SomeClass {
    ...
}

если ваш класс расширяется NSObject, вы также можете использовать:

if someInstance.isKind(of: SomeClass.self) {
    ...
}

Ответ 4

С it isKindOfClass:[ClassName class].

С it isKindOfClass(Classname.class()).