Как и 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) {
...
}