SwiftUI框架是声明性的还是命令性的,或者都不是?

时间:2019-07-06 14:12:18

标签: swiftui

我正在与一位同事讨论,后者坚持认为SwiftUI势在必行。对我来说,这似乎非常具有说明性。他说的对吗?

3 个答案:

答案 0 :(得分:0)

正如许多WWDC 2019视频(例如SwiftUI EssentialsIntroducing SwiftUI)所述,SwiftUI是声明性的。苹果公司一再将其与传统的命令式方法进行对比。他们的SwiftUI documentation的第一行说这是“声明应用程序的用户界面”。苹果公司的SwiftUI Essentials WWDC 2019视频将SwiftUI描述为其“新的声明性框架”。

诚然,SwiftUI也可以与命令式技术结合在一起。例如,可以将SwiftUI视图与UIKit命令式生成的视图/应用程序结合起来。在另一个示例中,当向视图元素添加轻击处理程序时,您可以从声明式编程的“内容”巧妙地转换为命令式编程的“方式”,同时概述了完成某些任务需要采取的一系列步骤。也许您的同事暗示了SwiftUI的这些方面之一。

但是认为SwiftUI是命令式框架是不准确的。它本质上是声明性的。

答案 1 :(得分:0)

答案 2 :(得分:-1)

命令式主要着眼于程序的执行方式。在我看来,声明式意味着SwiftUI通过其语法清楚地说明了正在发生的事情。在Apple的marketing blurb中,我展示了我认为非常声明性的代码示例。您可以说,在视图中您可以定位主体并显示图像,并在主体中垂直堆叠一些文本。我认为其说明发生什么情况是在没有底层语法的情况下进行的,例如:

    @IBOutlet weak var CaptionLabel: UILabel!

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

根据上面的语法,有很多如何起作用。您可以看到@IBAction,它向“接口”构建器声明这是将功能设置为按下按钮的方式。对我来说,这是如何的一种方式,实际上并不是正在发生的。在幕后的新SwiftUI中,也许它仍然是@IBAction和@IBOutlets,但是在我看来,Apple使得语法对人类更具声明性,并且与幕后发生的事情无关。因为SwiftUI是建立在UIKit之上的,所以我有这种感觉。我使用的标准是,如果该语法是人类可读的,并且将其工作方式的许多底层细节抽象出来,则其更具声明性。