所以我想做点什么:
protocol CanShowView: class where Self: UIViewController, SomeDelegate{
func someFunction()
}
extension CanShowView{
func someFunction(){
someView.SomeDelegate = self
}
基本上,我想确保协议只能由同样实现SomeDelegate协议的UIViewController实现,但是xcode对示例中的第一行代码很生气。
答案 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。