汉森 2.1.0

汉森 2.1.0

测试已测试
Lang语言 SwiftSwift
许可证 ISC
发布最新发布2020年12月
SPM支持SPM

Joost van DijkBoy van AmstelEric ScheersBram SchultingiOS Blendle维护。



汉森 2.1.0

  • Joost van Dijk、Eric Scheers、Boy van Amstel和Alem Utemissov

Language: Swift Platform: macOS | iOS | watchOS | tvOS Carthage License

什么是Hanson?

汉森是一个简单的、轻量级的库,用于在Swift中观察和绑定值。它被开发出来以支持我们Blendle iOS应用中的MVVM架构。Hanson在使用KVO时提供了几个优点,如更简洁的语法、无需样板代码以及在纯Swift类型中使用它的能力。

使用示例

最基本的使用案例是简单地观察一个Observable的变化

let observable = Observable("Hello World")
observe(observable) { event in
    // Invoked whenever observable.value is set.
    print("Value changed from \(event.oldValue) to \(event.newValue)")
}

汉森还提供KVO的包装器,因此您可以这样观察UITextFieldtext属性的变化

let textField = UITextField()
let textFieldObservable = textField.dynamicObservable(keyPath: #keyPath(UITextField.text), type: String.self)
observe(textFieldObservable) { event in
    print("Text field value changed from \(event.oldValue) to \(event.newValue)")
}

此外,您还可以使用汉森将一个可观察对象绑定到另一个可观察对象。假设我们有一个负责加载数据的数据模型,我们希望视图在数据模型加载数据时显示活动指示器

class ViewModel {

    let isLoadingData = Observable(false)

}

class View {

    let showsActivityIndicator = Observable(false)

}

let viewModel = ViewModel()
let view = View()
bind(viewModel.isLoadingData, to: view.showsActivityIndicator)

现在,每当数据模型的isLoadingData属性被设置为不同的值时,它将自动设置为视图的showsActivityIndicator属性。

绑定也支持从KVO支持的观察对象进行。为了将文本框的内容绑定到标签

let textField = UITextField()
let textFieldObservable = textField.dynamicObservable(keyPath: #keyPath(UITextField.text), type: String.self)

let label = UILabel()
let labelObservable = label.dynamicObservable(keyPath: #keyPath(UILabel.text), type: String.self)

bind(textFieldObservable, to: labelObservable)

如果您想自己处理绑定,您还可以提供一个闭包,当应该设置新值时,该闭包将被调用。以下示例中,我们将绑定一个isLoadingData可观察对象到一个UIActivityIndicatorView

let isLoadingData = Observable(false)
let activityIndicatorView = UIActivityIndicatorView()
bind(isLoadingData, to: activityIndicatorView) { activityIndicatorView, isLoadingData in
    if isLoadingData {
        activityIndicatorView.startAnimating()
    } else {
        activityIndicatorView.stopAnimating()
    }
}

汉森也支持观察通过 NotificationCenter 发送的通知。例如,观察应用进入后台时的情况。

let observable = NotificationCenter.default.observable(for: Notification.Name.UIApplicationDidEnterBackground)
observe(observable) { notification in
    print("Application did enter background")
}

调度器

调度器可以用来安排观察中的事件。默认情况下,汉森使用 CurrentThreadScheduler,它会立即在任何当前线程上发送事件。汉森还提供了 MainThreadScheduler,确保事件在主线程上发送。这在观察可能从后台线程更改的值时非常有用,您想根据该值进行 UI 更改。例如

let observable = Observable("Hello World")
observe(observable, with: MainThreadScheduler()) { event in
    // It's safe to do UI work here without calling DispatchQueue.main.async here
}

performOnBackground {
    observable.value = "Hello from a background"
}

在绑定可观察对象时也支持调度器。

let isLoadingData = Observable(true)
let activityIndicatorView = UIActivityIndicatorView()
bind(isLoadingData, with: MainThreadScheduler(), to: activityIndicatorView) { activityIndicatorView, isLoadingData in
    // It's safe to do UI work here without calling DispatchQueue.main.async here
}

performOnBackground {
    isLoadingData.value = false
}

您可以通过实现 EventScheduler 协议来创建自己的调度器。

要求

  • iOS 8.0+ / macOS 10.9+ / tvOS 9.0+
  • Xcode 8

安装

汉森可以通过 CocoaPods 或 Carthage 获取。

CocoaPods

  1. pod 'Hanson' 添加到您的 Podfile 文件中。
  2. 运行 pod install

Carthage

  1. github 'blendle/Hanson' 添加到您的 Cartfile 文件中。
  2. 运行 carthage update
  3. 按照 Carthage 读取文件 中描述的方法将框架链接到您的目标。

Swift包管理器

  1. 在Xcode中,选择您的项目并滚动到框架、库和嵌入式内容
  2. 点击+
  3. 在打开的框架和库窗口底部,选择添加其他...,然后选择添加包依赖...
  4. https://github.com/blendle/Hanson.git粘贴到搜索文本框中,并按照助手操作。

构建

项目显然可以通过Xcode顺利构建,只需加载Hanson.xcodeproj并运行。

为了方便,我们包含了一些脚本和一个Makefile,允许您通过命令行和持续集成构建Hanson。这些脚本灵感来源于GitHub的统御天下脚本模板。

|-- script/
  |-- etc/
    |-- config.sh   # Contains basic configuration parameters
  |-- bootstrap     # Prepares the project
  |-- setup         # Sets up the local building process
  |-- test          # Runs tests locally
  |-- cisetup       # Sets up the CI building process
  |-- citest        # Runs tests in a CI environment

开始方法

$ make

跳过设置并立即开始测试

$ make test

在提交拉取请求之前,请确保所有测试都通过。

发布说明

更改列表请参阅CHANGELOG.md

许可证

Hanson是以ISC许可证发布的。有关详细信息,请参阅LICENSE