gpt4 book ai didi

ios - 在 SwiftUI 中将 View 注入(inject) View

转载 作者:行者123 更新时间:2023-12-02 16:13:11 27 4
gpt4 key购买 nike

我正在尝试将一个 View 注入(inject)另一个 View 以避免代码重复。

我想出了这个主意:

struct WrapperView: View {

var injectedView: some View

var body: some View {
VStack {
injectedView
}
}
}

但我得到一个错误:Property 声明了一个不透明的返回类型,但没有可从中推断基础类型的初始化表达式

如何在 SwiftUI 中实现这样的功能?

最佳答案

您可以使用泛型。在这里,类型Content 符合View,因此我们可以传入类似Text 的内容。

类似于:

struct WrapperView<Content: View>: View {
let injectedView: Content

var body: some View {
VStack {
injectedView
}
}
}

用法:

WrapperView(injectedView: Text("Hello"))

如果你想像这样创建 VStack 时那样调用它:

WrapperView {
Text("Hello")
}

您可以将 WrapperView 更改为:

struct WrapperView<Content: View>: View {
private let injectedView: () -> Content

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

var body: some View {
VStack(content: injectedView)
}
}

我们使用@ViewBuilder,因此我们可以在闭包中构建 View 内容,允许我们执行以下操作:

WrapperView {
Text("Hello")

Text("world!")
}

关于ios - 在 SwiftUI 中将 View 注入(inject) View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67488568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com