整合SwiftUI——WWDC 2019

2022-08-11  本文已影响0人  IMKel

整合SwiftUI

1、帮助你在你现有的APP整合SwiftUI,通过使用托管控制器。


UIHostingController 继承至 UIViewController

2、在SwiftUI视图内嵌入使用现有框架创建的视图
Representable Protocol:可代表协议

SwiftUI使用现有视图,需要使用representable协议

3、Representable Context(可代表上下文),共三部分

案例:例如在SwiftUI中使用使用UIKit 创建的View,就可以通过 对应的代表协议——UIViewRepresentable去实现。

4、整合数据模型(动态数据)到 SwiftUI 中——使用BindableObject
BindableObject是一个很简单的协议,你所需要做的就是公开发布一个didChange发布器。

class MyDataModel : BindableObject {
    public var didChange: NotificationCenter.default.publisher(for: .MyNotification)
        .receive(on: RunLoop.main)
}
class MyDataModel : NSObject, BindableObject {
    public var didChange: MyObject.publisher(for: \.myKeypath)
        .receive(on: RunLoop.main)
}

class MyDefaults : BindableObject {
    public var didChange: AnyPublisher<Bool, Never>
    init() {
        let defaults = UserDefaults.standard
        didChange = Publishers.Merge(
            defaults.publisher(for: \.userOption1),
            defaults.publisher(for: \.userOption2)
        )
        .receive(on: RunLoop.main)
        .eraseToAnyPublisher()
    }
}

class MyDataModel : BindableObject {
    var didChange = PassthroughSubject<Void, Never>()
}
extension MyDataModel : NSFetchedResultsControllerDelegate {
    func controllerDidChangeContent(
        _ controller: NSFetchedResultsController<NSFetchRequestResult>)
    {
        didChange.send()
    }
}

上一篇 下一篇

猜你喜欢

热点阅读