SwiftUI(1):基本框架

2023-07-04 16:33:43 浏览数 (4)

SwiftUI很强大,但是用法过于丰富因此不太好掌握。此篇文章的目的是梳理SwiftUI的设计者想法(框架),整个文章系列记录自己学习/使用SwiftUI的体会和想法。

基本框架:

主函数(入口):

主函数代码如下:

代码语言:javascript复制
import SwiftUI

@main
struct SandwichesApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

以“@”开头的声明语词,例如@main,@State 都在向编译器声明该对象的特殊使用。

SwiftUI是核心库。Swift编程的核心概念有两个,包装(Wrapper),修饰(Modifier)。我们可以看到主代码(暂且这样称呼)的包装结构是,APP -> Scene(仅指出协议 protocol,后面会提到。WindowGroup更多的是起到布局的作用,此处先不进行讨论)。在接下来的文件我们会看到,Scene->View->View...等包装结构。其中View直接与内容相关,是最重要的包装。

此处可以看到 some ,这也是一个对编译器的一个声明,表示该对象并不是严格(字面)满足协议,而是允许有一些空间(关于这些特殊声明词,会在后面集中说明),详见:https://juejin.cn/post/6977622916233953294

而基本的内容则放在 ContentView 文件中,使用文件名即可完成对应文件(代码)的调用。

整个Swift的核心在于View的使用。

ContentView(内容所在处):

示例代码如下:

代码语言:javascript复制
import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

View -> some View 结构是 ContentView 文件最常用的框架,基本的内容都在 body 这个变量中。这也意味着 ‘body’ 并不严格(字面)满足协议。这里第一层的 View 更多的是一个抽象概念,与 Scene 相对应,提供一个接口。各种 View 的并列与包装现象也是常见的,因此也延伸出父View(Parent View)等概念。

PreviewProvider 协议下的变量(例如这里的ContentView_Previews)更多的是提供对当前文件的预览功能,对于整个App并没有结构性的用处。

常见的包装有:VStack(竖直)、HStack(水平)、ZStack(前后)、List等。

Assets

Assets作为App的资源放置处,App的图标、所有的照片都放置在这里。

例如,我们想要调用Assets的中的一张照片,使用下列的方式即可完成

代码语言:javascript复制
Image("myphoto1")

其他的资源也可以通过对应的函数(外接口)来得到。

1 人点赞