整合SwiftUI——WWDC 2019

整合SwiftUI

1、幫助你在你現(xiàn)有的APP整合SwiftUI,通過使用托管控制器。


UIHostingController 繼承至 UIViewController

2、在SwiftUI視圖內(nèi)嵌入使用現(xiàn)有框架創(chuàng)建的視圖
Representable Protocol:可代表協(xié)議

SwiftUI使用現(xiàn)有視圖,需要使用representable協(xié)議

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

  • Coordinator:協(xié)調(diào)器。幫助協(xié)調(diào)你的視圖可用于實(shí)施通用模式,例如委托、數(shù)據(jù)源、目標(biāo)動(dòng)作
  • Environment:情境。幫助你讀取SwiftUI的環(huán)境,比如配色方案、尺寸類
  • Transaction:動(dòng)畫。讓我們的視圖了解SwiftUI中是否有動(dòng)畫

案例:例如在SwiftUI中使用使用UIKit 創(chuàng)建的View,就可以通過 對應(yīng)的代表協(xié)議——UIViewRepresentable去實(shí)現(xiàn)。

4、整合數(shù)據(jù)模型(動(dòng)態(tài)數(shù)據(jù))到 SwiftUI 中——使用BindableObject
BindableObject是一個(gè)很簡單的協(xié)議,你所需要做的就是公開發(fā)布一個(gè)didChange發(fā)布器。

  • 通過發(fā)布器監(jiān)聽數(shù)據(jù)變化
class MyDataModel : BindableObject {
    public var didChange: NotificationCenter.default.publisher(for: .MyNotification)
        .receive(on: RunLoop.main)
}
  • 通過KVO監(jiān)聽數(shù)據(jù)變化
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()
    }
}

  • 通過指定發(fā)布器監(jiān)聽數(shù)據(jù)變化
class MyDataModel : BindableObject {
    var didChange = PassthroughSubject<Void, Never>()
}
extension MyDataModel : NSFetchedResultsControllerDelegate {
    func controllerDidChangeContent(
        _ controller: NSFetchedResultsController<NSFetchRequestResult>)
    {
        didChange.send()
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容