Commons 是一系列独立的 Swift 抽象集合。
Swift 具有来自词法上下文的静态绑定的第一类函数。以几种定义良好的方式组合函数是一个常见需求。我们提供了以下函数,这些函数返回与 x
相关的函数:
Always
- 总是返回 y
Complement
- 返回 !pred(x)
Compose
- 计算 g(f(x))
Disjoin
- 返回 pred1(x) || pred2(x)
Conjoin
- 返回 pred1(x) && pred2(x)
equalTo
- 返回 pred(x, y)
其中 y
、pred{,1,2}
、f
和 g
都是通过词法捕获的。
其他函数还包括在 SequenceType
上的 any
和 all
,以及一组接受一个谓词并返回 SequenceType
的函数,如 allUsing
、anyUsing
、mapUsing
和 appUsing
。
此模式允许任何 Item
(如果它有一个满足协议的属性),可以“采用”该协议。例如,考虑一个具有 属性的 Person
抽象:ssn、name 和年龄(以年为单位)
class Person : Equatable {
let ssn : String
let name : String
var age : UInt
}
func == (lhs:Person, rhs:Person) -> Bool {
return lhs.ssn == rhs.ssn
}
Person
无法比较,但在某些上下文中,您可能需要根据 ssn
、name
或 age
中的任何一个来比较人。您可以使用下面的方式来实现这一点,例如
let p1 = Person (ssn: "123", name: "Zack", age: 10)
let p2 = Person (ssn: "321", name: "Zoey", age: 9)
let younger = min(AsComparable (value: p1.age, item: p1), AsComparable (value: p2.age, item: p2)).item
younger.name // => "Zoey"
As 为三种常见的 Swift 协议实现:AsEquatable
、AsComparable
和 AsHashable
。还提供了 AsComparableInvert
。
无处不在的
enum Result<V,E:ErrorType> {
case Success(V)
case Failure(E)
}
这实际上应为其他更完整、更全面的 GitHub 包所取代。
通过以下方式访问框架
import SBCommons
三种简单的安装选项
在您的 Package.swift 文件中添加对 SBCommons 的依赖。
import PackageDescription
let package = Package (
name: "<your package>",
dependencies: [
// ...
.Package (url: "https://github.com/opuslogica/SBCommons.git", majorVersion: 0),
// ...
]
)
source 'https://github.com/EBGToo/CocoaPodSpecs.git'
pod 'SBCommons', '~> 0.1'
$ git clone https://github.com/opuslogica/SBCommons.git SBCommons
将 SBCommons
Xcode 项目添加到您的 Xcode 工作区。