广泛的扩展协议
斯威夫特 4.1,Xcode 9.3
我想知道,Swift 中最重要的协议是什么。我想做一个适用于可以设置的值的扩展。这样做的目的是让编写更多单行代码变得更容易。
我的扩展:
注意:目前,我正在扩展的“总体Equatable
”协议是.
extension Equatable {
@discardableResult public func set(to variable: inout Self) -> Self {
variable = self
return self
}
}
警告:我希望能够.set(to: )
用于不符合的值Equatable
。
用法:
let ten = 10
var twenty = 0
(ten + 10).set(to: &twenty)
print(twenty)
// Prints "20"
当您需要设置和返回值时,这会很有帮助,现在只需要一行代码即可。
return value.set(to: &variable)
最后的问题
如何在.set(to: )
不需要多个实例的情况下实现更深远的影响?
- 例如,如果我为 , , 编写了相同的扩展
Equatable
,CustomStringConvertible
对于CVarArg
符合所有 3 个协议的许多值,将会有多个相同扩展的建议。 - 如果这不可能,我可以使用的最佳总体协议是什么?
奖金问题:有没有办法在扩展中做一些与extension Equatable where !(Element: CustomStringConvertible)
或extension Equatable where !(Element == Int)
(使用where
谓词进行排除)不相似的事情?