Swift 无法将数组成员向下转换为协议类型

Swift 无法将数组成员向下转换为协议类型,swift,Swift,我有两个协议Valid和Resetable,还有一个inputview数组,类型为[Valid]。一切正常。现在我有了我的可重置的协议: protocol Resetable: class { func reset() } 现在,inputViews内部的所有内容也都符合Resetable协议,因此我要做的基本上是在每个成员上循环调用reset()。如果我这样做,那么它将起作用: for input in inputViews { (input as! Rese

我有两个协议
Valid
Resetable
,还有一个
inputview
数组,类型为
[Valid]
。一切正常。现在我有了我的
可重置的
协议:

protocol Resetable: class {
    func reset()
}
现在,
inputViews
内部的所有内容也都符合
Resetable
协议,因此我要做的基本上是在每个成员上循环调用
reset()
。如果我这样做,那么它将起作用:

    for input in inputViews {
        (input as! Resetable).reset()
    }
但是我用以下内容扩展了
Array

extension Array where Element:Resetable {
    func resetAll() {
        forEach({ $0.reset() })
    }
}
所以我真正想做的是完全向下转换
inputViews
并调用
resetAll()

我试过:

    let resetableViews = inputViews.map({ $0 as! Resetable })
    resetableViews.resetAll()
但是它说,
不支持将Resetable用作符合Resetable的具体类型


如何使用
resetAll()
实现这一点?

我希望我已经理解了问题/规格。免费从Rob Napier处获取,如何:

protocol Resettable {
    func reset() -> Resettable
}

struct ResettableArray {
    var array: [Resettable]
    init(_ array:[Resettable]) { self.array = array }
    func resetAll() -> [Resettable] {
        return array.map( { $0.reset() } )
    }
}

class dummy: Resettable {
    func reset() -> Resettable {
        print("Reset one element")
        return self
    }
}

let resettableDummy = ResettableArray([dummy(), dummy()])
resettableDummy.resetAll()

Resettable实际上是用两个t拼写的,就像遗忘/遗憾,但不同于可删除/可消耗,或可销售/可携带。比较。