gpt4 book ai didi

swift - 如果在扩展中实现协议(protocol)方法,是否需要在协议(protocol)中指定方法?

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:23 25 4
gpt4 key购买 nike

我喜欢 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)本身中定义功能,或者它只是被认为是好的做法?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com