给定一个包含多个子类实例的数组(都具有相同的父类(super class)),我想检查另一个所需子类类型数组的所有元素是否都由实例表示。
我想出了一个我认为有效的解决方案,但我被以下错误所困扰:在 requiredTypes.allSatisfy 的闭包中使用未声明的类型“requiredType”{ ... }
class MyClass { }
class SubClass1: MyClass { }
class SubSubClass1: SubClass1 { }
class SubClass2: MyClass { }
class SubClass3: MyClass { }
let requiredTypes = [SubClass1.self, SubClass2.self]
let instances = [SubSubClass1(), SubClass2()]
let meetsRequirements = requiredTypes.allSatisfy { (requiredType) -> Bool in
return instances.map({$0 is requiredType}).contains(true)
}
最佳答案
is
运算符需要一个在编译时已知的类型。你不能在那里使用变量。
一种可能是使用type(of:)
,例如:
let meetsRequirements = requiredTypes.allSatisfy { requiredType in
instances.contains { type(of: $0) == requiredType }
}
虽然这将是 SubSubClass1
的问题。
如果您的类继承自 NSObject
,您可以使用:
let meetsRequirements = requiredTypes.allSatisfy { requiredType in
instances.contains { $0.isKind(of: requiredType) }
}
Swift 当前不支持检查类是否继承自存储在变量中的类型。通常是代码味道。
关于swift - 迭代类型数组时出现 "Use of undeclared type "错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54579963/