所以我想做这样的事情:
protocol CanShowView: class where Self: UIViewController, SomeDelegate{
func someFunction()
}
extension CanShowView{
func someFunction(){
someView.SomeDelegate = self
}
基本上,我想确保该协议只能由同时实现SomeDelegate协议的UIViewController实现,但是xcode对示例中的第一行代码感到恼火。
最佳答案
如果您使用的是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
。