{ } Kit
BlocksKit 非常棒。它允许用代码块替代乏味的代理回调和目标动作,使代码更易读,并且允许你保持在实现中的上下文中。但是随着 Swift 语言的推出,BlocksKit 中的一些部分显得不太适用。首先,很多方法都使用了 id
类型,在 Swift 中这会被桥接到 AnyObject!
,这意味着在你可以为闭包中的对象编写任何代码之前,需要进行显式的强制类型转换和类型检查。其次,它不允许你使用 Swift 的结构体和枚举。
ClosureKit
填补了这一空白。它为与 BlocksKit 相同的方法提供了泛型实现,这使得你可以跳过类型检查和强制类型转换,同时也可以使用纯 Swift 的枚举和结构体。
本项目并非BlocksKit的替代品。其目标是为 Swift 开发者提供更便捷的 API,类似于 BlocksKit 为 Objective-C 提供的 API。此外,ClosureKit 只依赖于 Swift 的标准库,没有其他外部依赖。
内容
功能
集合类型
验证集合中的所有对象都符合提供的块。
let collection = [1,2,3]
collection.ck_all { (element) -> Bool in return element > 0 }
=> true
collection.ck_all { (element) -> Bool in return element < 2 }
=> false
ck_any
Any - 验证该集合中至少有一个对象符合该块。
let collection = [1,2,3]
collection.ck_any {(element) -> Bool in return element < 0}
=> false
collection.ck_any { (element) -> Bool in return element > 2}
=> true
ck_match
匹配 - 查找与提供的块匹配的第一个对象
let collection = [1,2,3]
println(collection.ck_match {(element) -> Bool in return element > 2})
=> 3
ck_none
无结果 - 验证集合中所有对象都不与块匹配。
let collection = [1,2,3]
collection.ck_none { (element) -> Bool in return element < 0 }
=> true
数组
ck_performSelect
执行选择 - 过滤数组,删除所有不与块匹配的对象
var array = [1, 2, -1, -2, 3]
array.ck_performSelect { (element) -> Bool in return element > 0 }
println(array)
=> [1,2,3]
ck_performReject
执行拒绝 - 过滤数组,删除所有与块匹配的对象。这是ck_performSelect的反向方法。
var array = [1,2,-1,-2,3]
array.ck_performReject { (element) -> Bool in return element < 0 }
println(array)
=> [1,2,3]
字典
ck_performSelect
执行选择 - 过滤字典,删除所有与提供块不匹配的键值对。
var dictionary = [1:"a",2:"b",3:"c"]
dictionary.ck_performSelect { (key,value) -> Bool in return key > 1}
=> [2:"b",3:"c"]
ck_performReject
执行拒绝 - 过滤字典,删除所有与提供块匹配的键值对。这是与 ck_performSelect
方法相反的。
var dictionary = [1:"a",2:"b",3:"c"]
dictionary.ck_performReject { (key,value) -> Bool in return key < 2}
=> [2:"b",3:"c"]
ck_reject
拒绝 - 查找不符合提供块的键值对。这是 ck_select 方法的相反操作。
let dictionary = [1:"a",2:"b",3:"c"]
dictionary.ck_reject { (key,value) -> Bool in return key < 2}
=> [2:"b",3:"c"]
ck_select
选择 - 查找所有匹配提供块的键值对。
let dictionary = [1:"a",2:"b",3:"c"]
dictionary.ck_select { (key,value) -> Bool in return key > 1}
=> [2:"b",3:"c"]
要求
- iOS 8 / macOS 10.10 / tvOS 9.0 / watchOS 2.0
- Swift 3
- Xcode 8
安装
- CocoaPods
pod 'ClosureKit', '~> 1.0.0'
- Carthage
github "DenHeadless/ClosureKit"