相关疑难解决方法(0)

什么使SwiftUI的DSL成为可能?

苹果的新SwiftUI框架似乎使用了一种新型语法,可以有效地构建元组,但又具有另一种语法:

var body: some View {
    VStack(alignment: .leading) {
        Text("Hello, World") // No comma, no separator ?!
        Text("Hello World!")
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试解决这种语法的实际含义时,我发现VStack此处使用的初始化程序将类型的闭包() -> Content 作为第二个参数,其中Content的通用参数View是通过闭包推断的。为了找出要Content推断的类型,我对代码进行了一些更改,并保持了其功能:

var body: some View {
    let test = VStack(alignment: .leading) {
        Text("Hello, World")
        Text("Hello World!")
    }

    return test
}
Run Code Online (Sandbox Code Playgroud)

这样,就test表明自己是类型的VStack<TupleView<(Text, Text)>>,即Content是类型的TupleView<Text, Text>。向上看TupleView,我发现它是一个源自SwiftUI自身的包装器类型,只能通过传递应该包装的元组来初始化。

现在,我想知道Text这个示例中的两个实例如何转换为TupleView<(Text, Text)>。这被黑入 …

swift swiftui

66
推荐指数
2
解决办法
4895
查看次数

SwiftUI 如何迭代使用 viewBuilder 的 init 传递的视图

我在这里看到,在 SwiftUI 中可以将视图定义为

struct Passthrough<Content>: View where Content: View {

    let content: () -> Content

    init(@ViewBuilder content: @escaping () -> Content) {
        self.content = content
    }

    var body: some View {
        content()
    }

}
Run Code Online (Sandbox Code Playgroud)

并将其用作

Passthrough {
    Text("one")
    Text("two")
    Text("three")
}
Run Code Online (Sandbox Code Playgroud)

Passthrough只会显示所有 3 个Text元素,而不对它们执行任何操作。

我怎样才能分别“捕获”3个视图中的每一个(迭代它们全部)并对它们做一些事情Passthrough?假设让每个文本具有不同的字体大小?

我可以通过什么方式ForEach对传递给的元素执行操作Passthrough

swift swiftui

6
推荐指数
0
解决办法
700
查看次数

标签 统计

swift ×2

swiftui ×2