【问题标题】:Inherit NSObjectProtocol with swiftUI使用 swiftUI 继承 NSObjectProtocol
【发布时间】:2020-10-23 01:49:58
【问题描述】:

我正在将一个项目从 ViewController/Storyboard 转换到 swiftUI。

ViewController 实现了一个协议,因此继承自 NSObjectProtocol。

SwiftUI中,没有ViewController,但是有一个ContentView,它是一个struct。这不能从 NSObjectProtocol 继承。

在“旧”方式中,我需要使用模型/视图/控制器设计模式。我还应该使用 swiftUI 吗?如果是这样,从它的名字看,似乎 ContentView 应该只是视图,而我缺少控制器。添加Controller的推荐方式是什么,可以是继承自NSObjectProtocol的类?

【问题讨论】:

  • 我还应该使用 swiftUI 吗? - 不,Apple 将 MVVM 视为 SwiftUI 的原生模式(WWDC 2019)。顺便说一句,对于 macOS,我想说过渡有点早。
  • 感谢您的指点。你能详细说明为什么它早吗? swiftUI还不稳定吗?
  • 不,它很稳定,但是有足够多的错误,并且与 AppKit/UIKit 和更多面向 iOS 的相比仍然非常有限。

标签: swift macos model-view-controller swiftui


【解决方案1】:

您的情况的模式是使用@StateObject 属性包装器。

struct MyView: View {
    @StateObject var protocolConformer = ObjectiveCProtocolConformer()

    var body: some View {
        // bind UI properties/actions to protocolConformer
    }
}

@StateObject 将给定的实例附加到与您的声明相对应的 View 中,因此每次在屏幕上呈现 MyView 时,它将使用相同的 protocolConformer 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2018-05-23
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多