1

拡張のための広範なプロトコル

スウィフト 4.1、Xcode 9.3

私は、Swift で最も包括的なプロトコルのいくつかは何だろうと思っていました。設定できる値に適用する拡張機能を作りたい。これの目的は、より多くの 1 行コードを簡単に記述できるようにすることでした。


私の内線番号:

注:当分の間、私が拡張している「包括的な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"

これは、値を設定して返す必要がある場合に役立ちます。そのために必要なコードは 1 行だけです。

return value.set(to: &variable)

最終質問

.set(to: )複数のインスタンスを必要とせずに、より広範囲に到達するにはどうすればよいですか?

  • たとえば、 、、に対して同じ拡張を記述した場合、これら 3 つのプロトコルすべてに準拠する多くの値に対してEquatable、同じ拡張の複数の提案が存在することになります。CustomStringConvertibleCVarArg
  • これが不可能な場合、使用できる最も包括的なプロトコルは何ですか?

ボーナス質問:orと似ていないことを行う拡張機能の方法はありますextension Equatable where !(Element: CustomStringConvertible)extension Equatable where !(Element == Int) (where除外目的で述語を使用します) ?


4

1 に答える 1