Avatar
omochimetaru 2/15/2018 6:16 AM
I frequently find myself wishing for more expressivity when using predicate functions, and so I end up defining these operators so I don’t have to create cluttered little closures: func && ( lhs: @escaping (Element) -> Bool, rhs: @escaping (Element) -> Bool ) -> (Element) -> Bool { return { lhs($0) && rhs($0) } } func ( lhs: @escaping (Element) -> Bool, rhs: @escaping (Element) -> Bool ) -> (Element) -> Bool { return { lhs($0) rhs($0) } } prefix func ! ...
6:17 AM
Bool関数を合成するオペレータを定義してこういうの書きたいってスレ var a = 1...10 a.filter(isEven) // [2, 4, 6, 8, 10] a.filter(!isEven) // [1, 3, 5, 7, 9] a.filter(isEven && isMultipleOfThree) // [6] a.filter(isEven && !isMultipleOfThree) // [2, 4, 8, 10] a.filter(isEven || isMultipleOfThree) // [2, 3, 4, 6, 8, 9, 10] a.filter(!(isEven || isMultipleOfThree)) // [1, 5, 7]
6:17 AM
// current a.filter({ isEven($0) && isMultipleOfThree($0) }) // pitched a.filter(isEven && isMultipleOfThree)