I need to check if an object is not of a certain type. I know in Kotlin it's possible to check if a type is not by using !is. I was wondering if there was an equivalent in Swift, or a workaround I could use if it's not possible?
Example in Kotlin:
Assume animals is an interface of different animals and there are classes that implement it such as Cat, Dog, Horse, Spider, etc:
var animals = listOf<Animals>(Horse(), Cat(), Dog(), Spider())
var chosenAnimals = animals.filter { it !is Spider }
Using swift syntax this is one way to do this
let animals: [Animals] = [Horse(), Cat(), Dog(), Spider()]
var chosenAnimals = animals.filter { type(of: $0) != Spider.self }
alternatively
var chosenAnimals = animals.filter { !($0 is Spider) }
Or, you can create your own isNot function, like this:
extension Animal {
func isNot<T: Animal>(_ type: T.Type) -> Bool {
return !(self is T)
}
}
print(Horse().isNot(Fish.self)) // prints true
print(Horse().isNot(Horse.self)) // prints false
you can use this:
var chosenAnimals = animals.filter({!($0 is Spider)})