【发布时间】:2020-10-20 08:26:01
【问题描述】:
我需要在 SwiftUI 中使用 init,但我只是在学习初始化程序。我找到了很多复杂的例子,但我无法理解基础知识。
如何根据其他 var 的值(例如基于切换的真/假)在 init() 中初始化不同的值?
示例代码
我正在尝试这样的事情:
import SwiftUI
struct ToggleView: View {
@State var toggleValue: Bool = true
var testValue: String
init() {
if toggleValue {
self.testValue = "true"
} else {
self.testValue = "false"
}
}
var body: some View {
VStack {
Toggle(isOn: $toggleValue) {
Text("True or false?")
}.padding()
Text("Selected value:")
Text("\(testValue)")
}
}
}
struct ToggleView_Previews: PreviewProvider {
static var previews: some View {
ToggleView()
}
}
但与 if toggleValue { 一致,我收到一个错误:
在所有存储属性初始化之前使用'self'
我尝试过改变:
var testValue: String
init() {
到:
@Binding var testValue: String
init(testValue: Binding<String>) {
但它也不起作用。如何将此 testValue 与切换绑定,因此在点击切换后,我的应用会打印:“Selected value: false”?
【问题讨论】:
-
您根本不需要
testValue。只需使用Text("\(toggleValue)")而不是Text("\(testValue)")。事实上,您不应该将第二个东西绑定到切换,因为 SwiftUI 喜欢单一的事实来源。 -
谢谢。但我需要在这个(或另一个简单的例子)上了解 init 。在我正在开发的一个应用程序中,我在使用 fetchrequest 和动态过滤器时遇到了 init 问题。如果不理解与布尔值相关的 inits,我就无法前进。以及下一步中的可选布尔值