あると便利なextension"find"
Swiftで色々便利になったり、融通が効きやすくなったけど、
個々の状況では不便だな〜とか、こういうメソッドあったらいいのに〜と
思うことも多々ある。
そんな時はextensionして使い勝手良くしてしまえばいい。
現場で教えて貰ったextensionで便利だなーと思ったのがあったので書いておく。
"find"は、filterで条件絞って、その中から先頭を抜き出すのに少し手間がかかるので、
条件に合った先頭を最初から返すようにしたもの。
// Swift2 extension SequenceType { func find(@noescape predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Self.Generator.Element? { for element in self { if try predicate(element) { return element } } return nil } }
// Swift3 extension Sequence { func find(predicate: (Self.Iterator.Element) throws -> Bool) rethrows -> Self.Iterator.Element? { for element in self { if try predicate(element) { return element } } return nil } }
教えて貰ったコードが、Swift2だったのでそれをそのままと
主流がSwift3になりつつあるのでSwift3のコードも併せて記載。
// 使用例 let array = [1, 20, 321, 77, 900] let extract1 = array.find { $0 >= 50 } print(extract1) // "Optional(321)\n" let extract2 = array.find { $0 >= 10 } print(extract2) // "Optional(20)\n"