Swift协议扩展中为getKey方法设默认参数遇返回值未使用警告如何解决?
正确实现方式
你原来的扩展存在两个问题:一是扩展里的getKey方法未声明返回值,和协议要求的-> String签名不匹配;二是无返回值的写法会因忽略协议方法的返回值触发警告。
正确的扩展需要保持返回值一致,同时给参数加上默认值,代码如下:
extension ApiEndpointsProtocol { func getKey(for endpoint: API.Keys, withChar: Bool = true) -> String { getKey(for: endpoint, withChar: withChar) } }
逻辑说明
- 协议中定义的
getKey(for:withChar:)是遵守协议的类型必须实现的核心方法,扩展里的同名方法只是给withChar参数补充了默认值true。 - 当你调用
getKey(for: someEndpoint)时,会自动使用默认值true,并转发到具体实现的核心方法上,同时把核心方法的返回值正常返回,不会再出现返回值未使用的警告。
这样处理后,遵守ApiEndpointsProtocol的类型只需要实现不带默认参数的核心方法,就能同时支持带参数和省略参数的两种调用方式。
内容的提问来源于stack exchange,提问作者Albert
相关产品推荐
相关产品推荐

