SwiftUI框架是声明性的还是命令性的?

SwiftUI框架是声明性的还是命令性的?,swiftui,Swiftui,我正在和一个同事讨论,他坚持速成是必须的。对我来说,这似乎是非常陈述性的。他说得对吗?命令式主要关注程序如何做某事。在我看来,声明性意味着SwiftUI通过其语法清楚地陈述了正在发生的事情。在苹果的SwiftUI中,他们展示了一个在我看来非常具有声明性的代码示例。可以看出,在视图中,可以将主体作为目标,显示图像,并在主体中垂直堆叠一些文本。我认为它说明了在没有低级语法的情况下发生的事情,例如: @IBOutlet weak var CaptionLabel: UILabel!

我正在和一个同事讨论,他坚持速成是必须的。对我来说,这似乎是非常陈述性的。他说得对吗?

命令式主要关注程序如何做某事。在我看来,声明性意味着SwiftUI通过其语法清楚地陈述了正在发生的事情。在苹果的SwiftUI中,他们展示了一个在我看来非常具有声明性的代码示例。可以看出,在视图中,可以将主体作为目标,显示图像,并在主体中垂直堆叠一些文本。我认为它说明了在没有低级语法的情况下发生的事情,例如:

    @IBOutlet weak var CaptionLabel: UILabel!

    @IBAction func Submit(_ sender: Any) {
        CaptionLabel.text = "Hello World"
    }

根据上面的语法,有很多东西是如何工作的。您可以看到@IBAction,它向界面生成器声明函数是如何设置为按钮按下的。对我来说,这是一种工作方式,并不是真正发生了什么。在新的SwiftUI中,幕后可能仍然是@IBAction和@IBOutlets,但在我看来,苹果已经使语法对人类更具声明性,并且与正在发生的幕后事件无关。我有这种感觉,因为SwiftUI是在UIKit之上构建的。我使用的度量标准是,如果语法是人类可读的,并且它抽象出了大量关于其工作方式的低级细节,那么它就更具声明性

如许多WWDC 2019视频(如和)所述,SwiftUI是声明性的。苹果反复将其与传统的强制性方法进行对比。他们的SwiftUI的第一行说它是用于“声明应用程序的用户界面”。苹果公司的WWDC 2019视频将SwiftUI描述为“新的声明性框架”

诚然,SwiftUI也可以与命令式技术相结合。例如,可以将SwiftUI视图与UIKit强制生成的视图/应用程序相结合。在另一个示例中,当您向视图元素添加tap处理程序时,您可以巧妙地从声明式编程的“what”转换为命令式编程的“how”,因为您概述了为实现某项任务而要采取的一系列步骤。也许你的同事在暗示SwiftUI的其中一个方面


但认为SwiftUI是一个必要的框架是不准确的。它本质上是声明性的。

SwiftUI使用称为声明性编程的编程范式


堆栈溢出不是解决基于意见的参数的地方。就我个人而言,在我的理解中,“命令式”建议单独声明:“制作一个标签。给它这个文本。给它这个颜色。把它放在界面上。”这就是你与Cocoa/UIKit交谈的方式。SwiftUI说:“这是一个带有此文本和此颜色的文本”。对我来说,这听起来像是声明性的。“我有这样的感觉,因为SwiftUI是建立在UIKit之上的。”(1)这种感觉并不构成有效的堆栈溢出答案。(2) 关于SwiftUI是“构建在UIKit之上”的说法充其量是可疑的,最坏的情况是完全错误的。举个例子,视图是UIView或文本是UILabel并没有简单的含义。更令人信服的是,SwiftUI的全部要点(或全部要点之一)是它出现在Mac、iDevice等上。;它在UIKit不存在的地方工作。