<分区>
我喜欢 Swift 让您在协议(protocol)中定义方法,然后通过该协议(protocol)的扩展来实现该方法的方式。但是,特别是对于您在相同范围和相同访问级别定义协议(protocol)和扩展的情况,您是否需要首先在协议(protocol)中定义方法?
考虑这段代码:
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
}
}
注意:我特别询问在相同范围内以相同访问级别一起定义的协议(protocol)和扩展。
如果情况并非如此——即扩展与协议(protocol)在不同的范围内——那么显然只有与扩展在相同范围内的项目才能自动实现。这是有道理的。
即在模块 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
的项目仍然会必须明确满足协议(protocol)。
同样,这特别是围绕一起定义协议(protocol)和扩展。是否需要在协议(protocol)本身中定义功能,或者它只是被认为是好的做法?