我正在尝试创建一个这样的struct实例数组:
let installers: [AnyObject] = [Homebrew(), Ls()]
但是我收到了这个错误:
value of type 'Homebrew' does not conform to expected element type 'AnyObject'
当我给数组没有类型时,我得到一个模糊的类型错误,它需要更多的上下文。
是否有可能完成我想要做的事情?
我用Google搜索过,但我找不到任何东西。
答案 0 :(得分:5)
对于结构使用Any
而不是AnyObject
。
let installers: [Any] = [Homebrew(), Ls()]
答案 1 :(得分:2)
正如Rob上面提到的,我创建了一个简单的协议类型InstallerType来帮助你解决这个问题。它不是使其符合Any或AnyObject协议,而是将其与某些特定类型相符合,以更好的方式对对象进行分类。
extension Homebrew: InstallerType { }
extension Ls: InstallerType { }
let installers: [InstallerType] = [Homebrew(), Ls()]
答案 2 :(得分:2)
根据@RobNapier的评论建议,我建立了一个protocol
。由于structs
都使用id
和command
常量,我想出了这个:
protocol CKInstall {
var id: String {get}
var command: [String] {get}
}
问题解决了!