【发布时间】:2018-01-10 18:03:07
【问题描述】:
我喜欢 Swift 如何让您在协议中定义方法,然后通过该协议的扩展来实现该方法。但是,特别是对于您在相同范围和相同访问级别中定义协议和扩展的情况,您是否需要首先在协议中定义方法?
考虑这段代码:
public protocol MyProtocol {
func addThese(a:Int, b:Int) -> Int
}
public extension MyProtocol {
func addThese(a:Int, b:Int) -> Int{
return a + b
}
}
这和这个有什么不同?
public protocol MyProtocol {
}
public extension MyProtocol {
func addThese(a:Int, b:Int) -> Int{
return a + b
}
}
注意:我特意询问协议和扩展是在同一范围内以相同的访问级别一起定义的。
如果不是这样的话——即扩展与协议在不同的范围内——那么显然只有与扩展在同一范围内的项目才能自动实现。这是有道理的。
即在模块 A 中:
public protocol MyProtocol {
func addThese(a:Int, b:Int) -> Int
}
在模块 B 中
internal extension MyProtocol {
func addThese(a:Int, b:Int) -> Int{
return a + b
}
}
模块 B 中实现 MyProtocol 的所有项目将自动获得 addThese 的实现,而在不同范围内实现 MyProtocol 的项目仍必须明确满足协议。
同样,这特别是围绕一起定义协议和扩展。是否需要在协议本身中定义函数,还是仅仅认为是好的做法?
【问题讨论】:
-
该死,删除了 Martin 的评论:/ 这是他链接到的博客文章:oleb.net/blog/2016/06/kevin-ballard-swift-dispatch
标签: swift protocols swift-protocols swift-extensions