2016-05-17 11 views
1

Swiftの新しい演算子~=を試していましたが、奇妙なエラーが発生しました。予想通り"パターンマッチ"演算子〜=原因 "Swiftのバイナリ演算子〜= 'はオペランドにできません"エラー

var filteredNumbers1 = [20,30,50,15].filter({15...30 ~= $0})

作品。

var filteredNumbers2 = [20,30,50,15].filter({$0 ~= 15...30})

私が何を疑問に思って

を '〜=' エラー

バイナリ演算子は型 'int型のオペランドに適用することができない例外と 'レンジ<のInt>' 15...30 ~= $0$0 ~= 15...30の違いは?

+1

〜 'について「新しい」ものは何もありません= '。 – matt

+1

あなたの 'filter'条件の読みやすいバージョンとして、'(15 ... 30).contains($ 0) 'を使うことをお勧めします。 – Hamish

答えて

4

~=は、Swift標準ライブラリでは、左側のパターンと右側の値が必要です。宣言は次のとおりです。

public func ~=<I : ForwardIndexType where I : Comparable>(pattern: Range<I>, value: I) -> Bool 

あなたのような何かを好きならあなたは右に左と範囲に値をサポートして独自のバージョンを追加することができます。

func ~=<I : ForwardIndexType where I : Comparable>(value: I, pattern: Range<I>) -> Bool { 
    return pattern ~= value 
} 
+0

これは予期せぬ副作用を伴う可能性があることに注意してください。たとえば、ちょっと変わった 'Int'ケースで範囲を'切り替え 'できるようになりました。 – Hamish

関連する問題