ViewModelOwners 1.0.0

ViewModelOwners 1.0.0

Krzysztof Zabłocki 维护。



ViewModelOwners

Platforms License

Carthage compatible CocoaPods compatible

Travis codecov

两个协议简化了 MVVM 集成,并有助于管理副作用订阅。

  • 不需要创建 viewModel 属性
  • 如果程序员忘记使用 setter 注入设置 viewModel(适用于 Reusable 视图),则无需处理 null 状态
  • 自动管理订阅(通过 Disposable 容器)
  • 一致的架构/副作用设计,为有用的开发工具打开了大门
class MyViewController: UIViewController, NonReusableViewModelOwner {
    func didSetViewModel(_ vm: MyViewModelProtocol, disposeBag: DisposeBag) {
        ...
    }
}

阅读我的博客文章,了解更多关于此技术细节的信息

要求

  • iOS 8.0+ / Mac OS X 10.10+ / tvOS 9.0+ / watchOS 2.0+
  • Xcode 10.0+

安装

依赖管理器

CocoaPods

CocoaPods 是 Cocoa项目的依赖管理器。您可以通过以下命令安装它

$ gem install cocoapods

要使用 CocoaPods 将 ViewModelOwners 集成到您的 Xcode 项目中,请在 Podfile 中指定它

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

pod 'ViewModelOwners', '~> 1.0.0'

然后,运行以下命令

$ pod install
Carthage

Carthage 是一个去中心化的依赖管理器,可自动将框架添加到您的 Cocoa 应用程序中。

您可以使用以下命令通过 Homebrew 安装 Carthage:

$ brew update
$ brew install carthage

要使用 Carthage 将 ViewModelOwners 集成到您的 Xcode 项目中,请在其 Cartfile 中指定它。

github "krzysztofzablocki/ViewModelOwners" ~> 1.0.0

手动方式

如果您不希望使用上述任何依赖项管理器,可以手动将 ViewModelOwners 集成到项目中。

Git 子模块

  • 打开终端,cd 到您的顶级项目目录,并运行以下命令 "if" 您的项目尚未初始化为 Git 仓库:
$ git init
  • 通过运行以下命令将 ViewModelOwners 添加为 Git 子模块
$ git submodule add https://github.com/krzysztofzablocki/ViewModelOwners.git
$ git submodule update --init --recursive
  • 打开新的 ViewModelOwners 文件夹,并将 ViewModelOwners.xcodeproj 拖到 Xcode 项目导航器中的应用程序项目下。

    它应该出现在您应用程序蓝色项目图标下方。它是在所有其他 Xcode 组之上还是之下无关紧要。

  • 在项目导航器中选择 ViewModelOwners.xcodeproj 并验证其部署目标是否与应用程序目标相同。

  • 接下来,在项目导航器中选择您的应用程序项目(蓝色项目图标)以导航到目标配置窗口,然后在侧边栏的“目标”标题下选择应用程序目标。

  • 在窗口顶部的选项卡栏中打开“常规”面板。

  • 在“嵌入的二进制文件”部分下点击 + 按钮。

  • 您将看到两个不同的 ViewModelOwners.xcodeproj 文件夹,每个文件夹内部都包含两个不同版本的 ViewModelOwners.framework,它们位于一个 Products 文件夹中。

    您可以选择任意一个 Products 文件夹,这并不重要。

  • 选择 ViewModelOwners.framework

  • 就这样!

ViewModelOwners.framework 自动添加为目标依赖项,链接框架和嵌入框架,在文件复制构建阶段,这是在模拟器和设备上构建所需的所有内容。

嵌入的二进制文件

  • https://github.com/krzysztofzablocki/ViewModelOwners/releases 下载最新版本。
  • 接下来,在项目导航器中选择您的应用程序项目(蓝色项目图标)以导航到目标配置窗口,然后在侧边栏的“目标”标题下选择应用程序目标。
  • 在窗口顶部的选项卡栏中打开“常规”面板。
  • 在“嵌入的二进制文件”部分下点击 + 按钮。
  • 添加下载的 ViewModelOwners.framework
  • 就这样!

集成

RxSwift

只需在项目中的任何位置添加此代码即可使 Swift 满意

extension DisposeBag: ViewModelOwnerDisposeBagProtocol {
    private final class DisposableWrapper: Disposable {
        let disposable: ViewModelOwnerDisposable
        
        init(_ disposable: ViewModelOwnerDisposable) {
          self.disposable = disposable
        }

        func dispose() {
            disposable.dispose()
        }
    }

    public func add(_ disposable: ViewModelOwnerDisposable) {
        insert(DisposableWrapper(disposable: disposable))
    }
}

现在您可以使用 ViewModelOwners 与 RxSwift 处理器一起使用了

func didSetViewModel(_ viewModel: ViewModel, disposeBag: DisposeBag) {

ReactiveSwift

只需在项目中的任何位置添加此代码即可使 Swift 满意

extension CompositeDisposable: ViewModelOwnerManualDisposeBagProtocol {
    private final class Wrapper: Disposable {
        var isDisposed: Bool
        let disposable: ViewModelOwnerDisposable

        init(_ disposable: ViewModelOwnerDisposable) {
            self.disposable = disposable
            isDisposed = false
        }

        func dispose() {
            disposable.dispose()
            isDisposed = true
        }
    }

    public func add(_ disposable: ViewModelOwnerDisposable) {
        add(Wrapper(disposable))
    }
}

现在您可以使用 ViewModelOwners 与 ReactiveSwift 一起使用了

func didSetViewModel(_ viewModel: ViewModel, disposeBag: CompositeDisposable) {

其他库

您只需将 LibraryDisposeBag 对象符合到 ViewModelOwnerManualDisposeBagProtocolViewModelOwnerManualDisposeBagProtocol 之一。

注意:如果您的 DisposeBag 容器在 dealloc 上没有自动释放,请使用 manual 变体。:

您可以在代码中使用它

func didSetViewModel(_ viewModel: ViewModel, disposeBag: LibraryDisposeBag) {

使用

贡献

欢迎提交问题和拉取请求!

作者

克日什托夫·扎布洛茨基 @merowing_

许可协议

ViewModelOwners基于MIT许可协议发布。详细信息请见LICENSE