swift - 迭代类型数组时出现 "Use of undeclared type "错误

标签 swift macos

给定一个包含多个子类实例的数组(都具有相同的父类(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/

相关文章:

swift - 如何将带有 anchor 的 View 定位到刚刚完成动画的 View ?

ios - 提供的 Assets 名称无效 : '(null)'

macos - Automator/AppleScript 用于处理 Mac Mail 中收到的电子邮件

MySQL 未从/usr/local/mysql/data 加载数据库文件

bash - ln 提示没有这样的文件或目录

macos - 核心数据 iCloud 同步中的关系完整性和验证

ios - 用户界面测试 : Simulate a shake gesture with Swift

ios - 尽管设置了安全区域指南,但使用 XIB 的显示中的白色区域仍然显示空白

ios - Swift 中不显示警报 View ?

java - Oracle JDeveloper 无法打开 java 文件?