我喜欢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
}
}
Module B中实现MyProtocol
的所有项目都会自动获得addThese
的实现,而在不同作用域中实现MyProtocol
的项目仍然必须显式满足该协议。
再次强调,这是关于同时定义协议和扩展的问题。是否有必要在协议本身中定义函数,或者这只是良好实践?