我需要检查对象是否不是某种类型。我知道在Kotlin中可以通过使用!is
来检查类型是否不是。我想知道Swift中是否有等效功能,或者在无法解决的情况下可以使用的解决方法?
科特林的例子:
假设动物是不同动物的接口,并且有实现它的类,例如Cat
,Dog
,Horse
,Spider
等
var animals = listOf<Animals>(Horse(), Cat(), Dog(), Spider())
var chosenAnimals = animals.filter { it !is Spider }
答案 0 :(得分:2)
使用快速语法是实现此目的的一种方法
df = data.frame(ID, Test1, Test2, Test3, stringsAsFactors=F)
df <- mutate(df, Test4 = ifelse('Detected' %in% c(Test1, Test2, Test3), 'Detected', 'Negative'))
ID Test1 Test2 Test3 Test4
1 1 Detected Detected Not Detected Detected
2 2 Not Detected Not Detected Detected Detected
3 3 Detected Detected Not Detected Detected
4 4 Detected Detected Not Detected Detected
或者
let animals: [Animals] = [Horse(), Cat(), Dog(), Spider()]
var chosenAnimals = animals.filter { type(of: $0) != Spider.self }
答案 1 :(得分:2)
或者,您可以创建自己的isnot函数,如下所示:
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
答案 2 :(得分:1)
您可以使用此:
var chosenAnimals = animals.filter({!($0 is Spider)})
答案 3 :(得分:1)
这是Swift中的一个工作示例:
protocol Animal { }
class Horse : Animal { }
class Cat : Animal { }
class Dog : Animal { }
class Spider : Animal { }
let animals:[Animal] = [Horse(), Cat(), Dog(), Spider()]
let chosen = animals.filter { !($0 is Spider) }
根据您的喜好填写协议/类:
答案 4 :(得分:0)
Swift中没有等效项,但它的对应项是is
运算符。您只需要取反运算符结果即可。
var animals = listOf<Animals>(Horse(), Cat(), Dog(), Spider())
var chosenAnimals = animals.filter { !($0 is Spider) }
或者,当您使用变异集合(var
)时,可以使用removeAll(where:)
var animals = listOf<Animals>(Horse(), Cat(), Dog(), Spider())
animals.removeAll(where: { $0 is Spider })
print("Animals: \(animals)") // should not contain Spider instances