Как и java instanceOf ключевое слово whats эквивалент в Swift?
Пример java:
A a = new A();
boolean isInstanceOfA = a instanceof A;
Здесь isInstanceOfA истинно
Мне нужно что-то подобное в Swift
Как и java instanceOf ключевое слово whats эквивалент в Swift?
Пример java:
A a = new A();
boolean isInstanceOfA = a instanceof A;
Здесь isInstanceOfA истинно
Мне нужно что-то подобное в Swift
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
let a = A()
let isInstanceOfA = a is A
Для swift3 это:
if someInstance is SomeClass {
...
}
если ваш класс расширяется NSObject
, вы также можете использовать:
if someInstance.isKind(of: SomeClass.self) {
...
}
С objective-c it isKindOfClass:[ClassName class]
.
С swift it isKindOfClass(Classname.class())
.