与扩展斯威夫特扩展

问题描述:

所以我想要做的事,如:与扩展斯威夫特扩展

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

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

基本上,我想,以确保该协议只能由一个UIViewController也实现了SomeDelegate协议来实现,但Xcode是疯了关于示例中的第一行代码。

如果您在使用雨燕4+:

protocol CanShowView { 
    func someFunction() 
} 

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

如果雨燕3.0:

protocol CanShowView { 
    func someFunction() 
} 

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

这是添加有条件的扩展,而不是在协议定义的正确途径。如果您想将协议限制为某种限制,最好的方法是使用associatedType s。

+0

这样做的伎俩,谢谢。 – Latcie