刚开始学 ios 开发,有个 Swift 语法不明白,求各位大大帮忙解释解释

2020-11-04 02:09:55 +08:00
 oukichi

语法教程上说,swift 中的结构体是需要运行一下才能跑起来的。但是下面这一段代码为什么可以把语句直接放在大括号里呢?

struct ContentView: View {
    var body: some View {
        VStack{
            Text("Hello, world!") //直接放在了大括号里
                .padding()
            Text("Hello, world!") //而且可以随意放很多个
                .padding()
        }
    }
}

请问:

  1. 这两个 Text()可以理解为参数吗?
  2. 这个结构体什么时候被实例化的呢?
  3. 如何写一个可以接受任意个参数的结构体呢?
  4. 这种直接写在大括号里的写法有专有名词吗?如果有的话请告诉我吧,我可以拿这个关键词进行搜索。

谷歌了一下没找到相关答案,于是发来 V2 求助,谢谢各位的解答,好人一生平安~

2707 次点击
所在节点    Swift
6 条回复
ch3nz
2020-11-04 04:07:55 +08:00
VStack 是个 struct
完整的使用是这样的:
```
VStack(alignment: .center, spacing: nil, content: {
Text("Placeholder")
Text("Placeholder")
})
```

所以
1 两个 Text 是参数 content 的值
2 外层 View 实例化的时候,它就实例化
3 content 的类型是 closure,所以不是 struct 有任意个参数,而是 content 可以是多个 closure
4 VStack 的定义中,content 被 @ViewBuilder 修饰
https://developer.apple.com/documentation/swiftui/viewbuilder
FutherAll
2020-11-04 09:31:16 +08:00
Swift 为 SwiftUI 搞了一堆语言特性,感觉太臃肿了
oukichi
2020-11-04 10:21:39 +08:00
@ch3nz 谢谢大哥!非常有帮助!
ruzztok
2020-11-04 14:27:45 +08:00
我看完 swift 语法概览再看这个 hello world 也是懵
zhentivip
2021-03-16 12:08:55 +08:00
这个是界面语言,是基于 swift 魔改的。
zzyyqq
2022-04-19 06:00:47 +08:00
感觉这个是借鉴了 react 写网页的思路。 乱搞!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/721567

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX