【问题标题】:Passing a String value to a viewbuilder from another view从另一个视图将字符串值传递给视图构建器
【发布时间】:2022-01-04 10:12:42
【问题描述】:

这是基础视图

struct BaseView<Content: View>: View {
    @State private var ShowSFView : Bool = false
   
    let content: Content
   
    init(@ViewBuilder content:  () -> Content ) {
        self.content = content()
     
        
    }

//Code for button and URL

}

当我调用这个 baseView 时,我需要从另一个 View 传递两个 String 值到这个 BaseView 。一个用于按钮标签,另一个用于 URL。

我无法通过在初始化程序上声明变量来做到这一点,得到各种错误。怎么可能 我做到了吗?

编辑

baseView 中的初始化程序

init(@ViewBuilder content:  () -> Content , btnlabel: String) {
        self.content = content()
        self.btnlabel=btnlabel
        
    }

我如何从另一个视图中调用它

 BaseView.init(content: () -> _, btnlabel: "")

【问题讨论】:

  • 您遇到了什么错误?可以通过init来完成。
  • 如果我向 init 添加另一个字符串值,应该添加什么作为参数来代替内容: _> 当我从第二个视图调用它时?
  • 可以添加代码吗?你尝试过的
  • 添加一个参数的init并调用

标签: ios swift xcode swiftui viewbuilder


【解决方案1】:

你可以像普通的init一样传递任何参数或字符串参数。

struct BaseView<Content: View>: View {
    
    @State private var ShowSFView : Bool = false
    
    private let content: Content
    
    let stringOne: String
    let stringTwo: String
    
    init(stringOne: String, stringTwo: String, @ViewBuilder content:  () -> Content ) {
        self.content = content()
        self.stringOne = stringOne
        self.stringTwo = stringTwo
    }
    
    var body: some View {
        Text(stringOne)
        Text(stringTwo)
    } 
}

现在你可以像这样使用它了

BaseView(stringOne: "str1", stringTwo: "str2") {
    // Content
}

编辑

从你的例子中,你可以像这样使用它

BaseView(content: {
    // Content
}, btnlabel: "Lable")

【讨论】:

  • 非常感谢。我是 SwiftUI 新手。我唯一需要的是如何调用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
相关资源
最近更新 更多