V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
oukichi
V2EX  ›  Swift

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

  •  
  •   oukichi · Nov 4, 2020 · 3767 views
    This topic created in 2004 days ago, the information mentioned may be changed or developed.

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

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

    请问:

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

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

    6 replies    2022-04-19 06:00:47 +08:00
    ch3nz
        1
    ch3nz  
       Nov 4, 2020   ❤️ 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  
       Nov 4, 2020
    Swift 为 SwiftUI 搞了一堆语言特性,感觉太臃肿了
    oukichi
        3
    oukichi  
    OP
       Nov 4, 2020
    @ch3nz 谢谢大哥!非常有帮助!
    ruzztok
        4
    ruzztok  
       Nov 4, 2020
    我看完 swift 语法概览再看这个 hello world 也是懵
    zhentivip
        5
    zhentivip  
       Mar 16, 2021
    这个是界面语言,是基于 swift 魔改的。
    zzyyqq
        6
    zzyyqq  
       Apr 19, 2022
    感觉这个是借鉴了 react 写网页的思路。 乱搞!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   857 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 22:03 · PVG 06:03 · LAX 15:03 · JFK 18:03
    ♥ Do have faith in what you're doing.