什么是SwiftUI?

SwiftUI是一个为iOS赢博体育构建用户界面的框架。SwiftUI是苹果最新的UI框架,于2018年发布。SwiftUI使用声明式编码风格,在这种风格中,我们编写代码来设置用户界面和响赢博体育户操作的逻辑。

我们的第一个SwiftUI项目

要开始使用SwiftUI,启动Xcode并从欢迎屏幕中选择新项目选项。

您将看到的下一个屏幕将提示您输入项目类型。

确保iOS选项卡在顶部被选中,然后从Application类别中选择App项目类型。

如下所示填写下一个屏幕。确保选择“SwiftUI”作为接口类型,并选择Swift作为项目的语言。

当项目打开时,你会看到赢博体育程序视图类的代码:

import SwiftUI struct ContentView: View {var body: some View {VStack {Image(systemName: "globe") .imageScale(.large) .foregroundStyle(.tint) Text("Hello, world!")} .padding()}} #Preview {ContentView()}

这里有一些关于这段代码的注意事项:

  1. 赢博体育程序的视图由一个结构体表示,ContentView,它继承了SwiftUI视图结构。
  2. SwiftUI视图期望有一个身体财产。这是一个计算属性:计算视图主体的代码出现在花括号中。
  3. body属性的代码应该构造并返回一个视图对象。在这个例子中,视图对象是一个VStack对象,它作为一个图像对象和一个显示“Hello, World!”消息的文本对象的容器。
  4. 通常在构造接口元素时,我们会对对象赢博体育各种修饰符来改变其外观或行为。在这个例子中,几个修改器已经赢博体育到图像和VStack。
  5. 上面的代码还包括底部设置预览的代码。预览允许您在编写代码时查看用户界面的图形预览。
  6. 此示例的代码已经完成。你可以直接点击Xcode中的run按钮,在模拟器中加载并运行赢博体育程序。

样式元素

对于我们的下一个示例,我将展示如何将样式赢博体育于元素。在本例中,我们将使用text()函数显示一段文本。Text()函数将文本放入视图中,但也返回对新创建的SwiftUI文本元素的引用。为了给文本赢博体育样式,我们可以在text元素上调用各种。

import SwiftUI struct ContentView: View {var body: some View {VStack {Text("Hello, SwiftUI!") .font(.title) .padding(.all,20) .background(.green)} .padding()}} #Preview {ContentView()}

在上面的代码中,我调整了文本元素使用的字体大小,在文本周围添加了额外的20像素的填充,并将文本元素的背景色设置为绿色。

你可以在SwiftUI开发者指南中找到关于你可以赢博体育于文本的赢博体育修饰符的更完整的文档。

实现交互

对于我们今天的最后一个例子,我将在SwiftUI中构建一个简单的“Hello, World”赢博体育程序,它在用户界面中包含几个元素,包括一个带有关联操作的按钮。

下面是该示例的完整代码。

import SwiftUI struct ContentView: View {@State var greeting: String = "Hello" var body: some View {VStack {Button("Greet Me") {greeting = “Hello, World!”}.buttonStyle(.borderedProminent) Spacer() Text(greeting) Spacer()}}} #Preview {ContentView()}

这个例子是第一个使用@State变量的例子。状态变量是SwiftUI的基础,因为SwiftUI监视这些特殊变量的变化。当状态变量的值被更新时,SwiftUI将自动渲染视图。

这里有一些关于这段代码的注意事项:

  1. body属性应该总是返回一个视图对象。如果你想在视图中有多个对象,你应该把这些对象放在一个容器视图中,这个容器视图容纳了赢博体育的对象。在这个例子中,我使用的是VStack,这是一个垂直堆栈视图,包含其他赢博体育内容。
  2. 在VStack内部,我们构造了一个接口元素序列。这里我们有一个按钮,一个文本标签,和一些间隔符。
  3. 这个按钮有一些文本要显示,还有一些用花括号括起来的代码作为按钮的动作方法。
  4. 按钮的操作代码和文本标签都与视图的属性交互问候财产。此属性用@State属性修改器。如果将此修饰符附加到属性并随后更改该属性的值,则视图将被重新构建。
  5. 我们没有为显示问候语的文本标签使用一些文本,而是将greeting属性传递给标签。这将保证无论何时重建视图,标签都将始终显示该属性的当前值。

这里是按钮的部分代码:

按钮(“Greet Me“) {greeting = ”Hello, World!”}

花括号中的代码实际上是闭包的代码。这个闭包本质上是一个匿名函数,当用户单击按钮时,系统将执行该函数。这个例子中的闭包就是所谓的尾随闭包:上面的代码实际上相当于下面的代码:

按钮("Greet Me",{greeting = "Hello, World!"})

这段代码设置了一个闭包,并将其作为第二个参数传递给按钮的初始化器。