SFBaseKit
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 字段中的条目。
设置 #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 绑定 - 应该调用 sink 或 sinkAndFire。为了将 Observable 与 UIControls 绑定 - 应该在 ViewController 中调用 oneWayBind 或 twoWayBind。
@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 文件。