Это базовый вид

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

}

Мне нужно передать два значения String в этот BaseView из другого View, когда я вызываю этот baseView. Один предназначен для метки кнопки, а другой - для URL-адреса.

Я не могу этого сделать, объявляя переменные в инициализаторе, получаю различные ошибки. Как я могу этого добиться?

Редактировать

Инициализатор в baseView

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

Как я назвал это с другой точки зрения

 BaseView.init(content: () -> _, btnlabel: "")
0
Ae Ri 26 Ноя 2021 в 13:24
Какая у вас ошибка? Это можно сделать с помощью init.
 – 
Raja Kishan
26 Ноя 2021 в 13:28
Если я добавлю еще одно строковое значение в init, что следует добавить в качестве параметра вместо содержимого: <() -> _>, когда я вызываю его из второго представления?
 – 
Vishnu
26 Ноя 2021 в 13:31
Не могли бы вы добавить код? который вы пробовали
 – 
Raja Kishan
26 Ноя 2021 в 13:32
Добавил инициализацию с одним параметром и вызовом
 – 
Vishnu
26 Ноя 2021 в 13:35

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")
1
Raja Kishan 26 Ноя 2021 в 13:35
Большое спасибо . Я новичок в SwiftUI. Единственное, что мне было нужно, это как назвать это
 – 
Vishnu
26 Ноя 2021 в 13:46