在数组元素上调用约束协议的函数?

时间:2017-11-05 17:47:49

标签: swift swift-protocols

下面的代码无法编译,但我不知道该怎么做才能让它编译和运行。粘贴在操场上试一试。我希望它能两次打印“配置”。我的问题不是this的重复。我没有一系列符合协议的东西。我想测试一下它们是否符合要求,如果有的话就调用该方法。

我的目标是让它在数组中可以处理MyConfiguration对象的任何对象上调用configure,否则什么都不做。有什么想法吗?

protocol Configurable {
    associatedtype Configuration
    func configure(with configuration: Configuration)
}


struct MyConfiguration { }

class Base { }

class A: Base, Configurable {
    func configure(with configuration: MyConfiguration) {
        print("configured")
    }
}

class B: Base { }

extension Array where Iterator.Element == Base {

    func configure(with configuration: MyConfiguration) {
        for each in self {
            if let configurable = each as? Configurable {
                configurable.configure(with: configuration)
            }
        }
    }
}

let array: [Base] = [A(), B(), A()]
let conf = MyConfiguration()

array.configure(with: conf)

0 个答案:

没有答案