Hi,
How would we safely convert an optional state to a non optional binding variable?
Using Binding<V?> to Binding<V>? with optional binding (if let) crashes if V is later set to nil.
Below is a minimal reproducible example.
import SwiftUI
struct ChildView: View {
@Binding var nonOptional: String
var body: some View {
Text("text that does not use the binding variable")
}
}
struct ContentView: View {
@State var optional_: String? = "test"
var body: some View {
if let nonOptional = Binding($optional_) {
ChildView(nonOptional: nonOptional)
Button(action: {
optional_ = nil // crashes after tapping
}) {
Text("set to nil")
}
} else {
Text("text is nil")
}
}
}
Error:
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1ba385a30)
in App.swift.
I am not interested in using "" or other default values, since this only works well with strings, and misses the point of my question.
Thanks.
Post
Replies
Boosts
Views
Activity
Using ForEach always crashes a Playground on MacOS:
swift
import PlaygroundSupport
import SwiftUI
struct ContentView: View {
var body: some View {
ForEach(["Any", "Data"], id: \.hashValue) { str in
Text(str)
}
}
}
PlaygroundPage.current.setLiveView(ContentView())
error: Execution was interrupted, reason: signal SIGABRT.
Hi,
I'm trying to use SwiftUI on my iPad with Swift Playgrounds. The view below renders fine initially, but unfortunately the view does not update when @State changes, like it does on my Mac. In the little sidebar I can see the closure does get executed though...
I'm using the newest non-beta version of everything.
swift
import SwiftUI
import PlaygroundSupport
struct ContentView: View {
@State private var tapCount = 0
var body: some View {
Button("Tap count: \(tapCount)") {
tapCount += 1
}
}
}
PlaygroundPage.current.setLiveView(ContentView())
Thanks.