Swift 5.10中协议方法参数名不同仍可编译是否为预期行为?
这是Swift的预期行为吗?
这是完全符合预期的行为。在Swift的协议方法定义中,仅要求实现的方法与协议方法的外部参数标签一致,而内部参数名属于实现细节,协议不会强制要求和定义保持相同。
看你的代码示例:
protocol MyProtocol { func foo(with parameter: Bool) -> Bool } class Conforms: MyProtocol { func foo(with anotherParameter: Bool) -> Bool { true } }
协议里的foo(with:)方法,with是外部参数标签;实现类中的方法同样保留了with这个外部标签,只是把内部使用的参数名从parameter改成了anotherParameter——这完全满足协议的一致性要求。
只有当实现方法的外部参数标签和协议定义不一致时(比如改成foo(_:)或者foo(using:)),才会触发协议不符合的编译错误。
内容的提问来源于stack exchange,提问作者Filippo
相关产品推荐
相关产品推荐

