测试测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2017年1月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✓ |
由 JP Wright 维护。
您可能会找到的最简单的 Observable
实现,用于函数式响应式编程。
这个库并不像 Conal Elliot 定义的那样使用术语 FRP (函数式响应式编程),而是将其作为一种既具有函数性又具有响应性的范式。更多关于差异的信息,请参阅 为什么我不能说 FRP 但是我刚刚做了。
swift build
Result
更多关于此实现如何工作的完整指南,请参阅关于 Swift 中的函数响应式编程 的系列博客,或在 UIKonf 2015 的演讲 如何使用没有黑魔法的函数响应式编程。
let text = Observable<String>()
text.subscribe { string in
print("Hello \(string)")
}
text.update("World")
let text = Observable<String>()
let greeting = text.map { subject in
return "Hello \(subject)"
}
greeting.subscribe { text in
print(text)
}
text.update("World")
let text = Observable<String>()
let greet: (String)->String = { subject in
return "Hello \(subject)"
}
text
.map(greet)
.subscribe { text in
print(text)
}
text.update("World")
let text = Observable<String>()
func greetMaybe(subject: String) throws -> String {
if subject.characters.count % 2 == 0 {
return "Hello \(subject)"
} else {
throw NSError(domain: "Don't feel like greeting you.", code: 401, userInfo: nil)
}
}
text
.map(greetMaybe)
.then { text in
print(text)
}
.error { error in
print("There was a greeting error")
}
text.update("World")
let text = Observable<String>()
func greetMaybe(subject: String) -> Observable<Result<String>> {
if subject.characters.count % 2 == 0 {
return Observable(.success("Hello \(subject)"))
} else {
let error = NSError(domain: "Don't feel like greeting you.", code: 401, userInfo: nil)
return Observable(.error(error))
}
}
text
.flatMap(greetMaybe)
.then { text in
print(text)
}
.error { _ in
print("There was a greeting error")
}
text.update(.success("World"))
let baseCost = Observable<Int>()
let total = baseCost
.flatMap { base in
// Marks up the price
return Observable(base * 2)
}
.map { amount in
// Adds sales tax
return Double(amount) * 1.09
}
total.subscribe { total in
print("Your total is: \(total)")
}
baseCost.update(10) // prints "Your total is: 21.8"
baseCost.update(122) // prints "Your total is: 265.96"
iOS 上的动态框架需要最小的部署目标为 iOS 8 或更高。要使用 Interstellar 并针对 iOS 7 的项目,您必须将所有 Swift 文件直接包含到您的项目中。
将 Interstellar 添加到您的 Package.swift
import PackageDescription
let package = Package(
name: "Your Awesome App",
targets: [],
dependencies: [
.Package(url: "https://github.com/jensravens/interstellar.git", majorVersion: 2),
]
)
Interstellar 的设计宗旨是轻量级。没有 UIKit 绑定,没有重型的结构 - 只是一个简单的 Obersable<T>
。因此它易于理解和移植(除了 Foundation 之外没有其他依赖)。
此外,Interstellar 支持 BYOR(自行提供 Result<T>
)。由于其基于协议的实现方式,您可以直接使用来自其他框架的结果类型与 Interstellar 方法配合使用。
Interstellar 由 Jens Ravens 所有并维护。
Optional
和 Array
的一致性。Thread
已转移到名为 WarpDrive 的新项目中。swift build
和新的 Swift 软件包管理器,包括对 Linux 的支持。同时删除了过时的 bind 方法。Observable<T>
,这是 Signal 的继任者。使用信号的 observable
属性将代码从 Signal<T>
迁移过来。还增加了对 Warpdrive 的 Linux 支持,并引入了 BYOR™ 技术 Bring Your Own Result<T>
。Interstellar 在 MIT 许可证下发布。有关详情,请参阅 LICENSE。