与扩展斯威夫特扩展
问题描述:
所以我想要做的事,如:与扩展斯威夫特扩展
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。
这样做的伎俩,谢谢。 – Latcie