带扩展的Swift扩展

时间:2017-10-10 22:35:07

标签: ios swift

所以我想做点什么:

protocol CanShowView: class where Self: UIViewController, SomeDelegate{
func someFunction()
}

extension CanShowView{
func someFunction(){
someView.SomeDelegate = self
}

基本上,我想确保协议只能由同样实现SomeDelegate协议的UIViewController实现,但是xcode对示例中的第一行代码很生气。

1 个答案:

答案 0 :(得分:4)

如果您使用的是Swift 4+:

protocol CanShowView {
    func someFunction()
}

extension CanShowView where Self: UIViewController & SomeDelegate {
    func someFunction() {
        someView.SomeDelegate = self
    }
}

如果是Swift 3.0:

protocol CanShowView {
    func someFunction()
}

extension CanShowView where Self: UIViewController, Self: SomeDelegate {
    func someFunction() {
        someView.SomeDelegate = self
    }
}

这是添加条件扩展的正确方法,而不是协议定义。如果要将协议限制为某种约束,最好的方法是使用associatedType s。