V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
oukichi
V2EX  ›  Swift

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

  •  
  •   oukichi · 2020-11-04 02:09:55 +08:00 · 2668 次点击
    这是一个创建于 1240 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    请问:

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

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

    6 条回复    2022-04-19 06:00:47 +08:00
    ch3nz
        1
    ch3nz  
       2020-11-04 04:07:55 +08:00   ❤️ 2
    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
        2
    FutherAll  
       2020-11-04 09:31:16 +08:00
    Swift 为 SwiftUI 搞了一堆语言特性,感觉太臃肿了
    oukichi
        3
    oukichi  
    OP
       2020-11-04 10:21:39 +08:00
    @ch3nz 谢谢大哥!非常有帮助!
    ruzztok
        4
    ruzztok  
       2020-11-04 14:27:45 +08:00
    我看完 swift 语法概览再看这个 hello world 也是懵
    zhentivip
        5
    zhentivip  
       2021-03-16 12:08:55 +08:00
    这个是界面语言,是基于 swift 魔改的。
    zzyyqq
        6
    zzyyqq  
       2022-04-19 06:00:47 +08:00
    感觉这个是借鉴了 react 写网页的思路。 乱搞!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5297 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:22 · PVG 17:22 · LAX 02:22 · JFK 05:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.