SFBaseKit 3.1.1

SFBaseKit 3.1.1

Kostadin ZamanovViktor GeorgievNikola Nikolov 维护。



SFBaseKit 3.1.1

  • Scalefocus

SFBaseKit

Swift Version License Build Status CocoaPods Compatible Platform

SFBaseKit 由常见的实用程序和扩展组成,这些实用程序和扩展不包含在原生 iOS 框架中。

目录

功能

  • 协调器 - 使用协调器模式设置您的导航。
  • 基类 - 实现常用实用程序的实用子类。
  • 扩展 - 帮助 UIKit 组件、数据类型和集合的扩展。

要求

  • iOS 10.0+
  • Swift 4

安装

Cocoapods

SFBaseKit 可以通过 CocoaPods 获得。CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问其网站。要将 SFBaseKit 集成到您的 Xcode 项目中使用 CocoaPods,请在 Podfile 中指定它

pod 'SFBaseKit', '~> 2.1.0'

为了获得最大好处,在源文件开头导入 SFBaseKit

import SFBaseKit

Carthage

Carthage 是一个去中心化的依赖管理器,它会构建您的依赖,并提供您二进制框架。要将 SFBaseKit 集成到您的 Xcode 项目中使用 Carthage,请在 Cartfile 中指定它

github "scalefocus/SFBaseKit" ~> 2.1.0

使用示例

协调器

为了保证协调器模式正确设置,请按照以下步骤进行。首先在应用的 General 选项卡Deployment Info 部分中删除 Main Interface 字段中的条目。

Alt Text

设置 #1

应将 AppCoordinator 和窗口初始化在 AppDelegate

var window: UIWindow?
var appCoordinator: Coordinator?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        // Initialize the window and the appCoordinator
        window = UIWindow(frame: UIScreen.main.bounds)
        appCoordinator = AppCoordinator(window: window)
        appCoordinator?.start()
        
        return true
    }

或者

设置 #2

窗口和 AppCoordinator 的初始化应该在其他 SceneDelegate 而不是 AppDelegate 中进行。

var window: UIWindow?
var appCoordinator: Coordinator?

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = scene as? UIWindowScene else { return }
        
        // Initialize the window and the appCoordinator
        window = UIWindow(frame: UIScreen.main.bounds)
        window.windowScene = windowScene
        
        appCoordinator = AppCoordinator(window: window)
        appCoordinator?.start()
    }

在 AppCoordinator 中初始化第一个 Coordinator 并添加到 childCoordinators。

let loginCoordinator = LoginCoordinator(navigationController: navigationController)
addChildCoordinator(loginCoordinator)

在 AppCoordinator 的 start 方法中启动第一个 Coordinator。

 childCoordinators.first?.start()

在 LoginCoordinator 中重写 start 方法并推送或显示 ViewController。

class LoginCoordinator: Coordinator {
     override func start() {
            guard let loginViewController = LoginViewController.instantiateFromStoryboard() else { return }

            loginViewController.sceneDelegate = self
            navigationController.pushViewController(loginViewController, animated: false)
        }
}

要运行示例项目,首先克隆仓库,然后从 Example 目录中运行 pod install

Observable

ViewModel

ViewModel 中应该将可绑定属性声明为 Observable。

struct ExampleViewModel {
    let name = Observable<String>("")
    let email = Observable<String>("")
}

ViewController

要在 ViewController 中创建 Observable 绑定 - 应该调用 sinksinkAndFire。为了将 Observable 与 UIControls 绑定 - 应该在 ViewController 中调用 oneWayBindtwoWayBind

@IBOutlet private weak var nameLabel: UILabel!
@IBOutlet private weak var emailTextField: UITextField!

override viewDidLoad() {
    ...
    setupBinding()
}

private func setupBinding() {
    viewModel.name.sink { [weak self] name in
        self?.nameLabel.text = name
    }
    
    viewModel.email.oneWayBind(with: emailTextField)
}

许可

SFBaseKit 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。