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拼写的,就像遗忘/遗憾,但不同于可删除/可消耗,或可销售/可携带。比较。