SwiftUI 中的可选状态或绑定
Posted
技术标签:
【中文标题】SwiftUI 中的可选状态或绑定【英文标题】:Optional State or Binding in SwiftUI 【发布时间】:2021-04-02 08:21:12 【问题描述】:我想询问有关 SwiftUI 行为的问题
当我使用.onChange( value)
为什么如果我使用带有可选类型的@State var some: SomeType?
然后@Binding var some: SomeType
这个操作符只检测到变化
它从某个 SomeType 值变为 nil ,反之亦然。
但是对底层对象值的更改不会被检测为更改
例如。 @Binging var progress: Int?
将进度从 nil 更改为 100 检测更改
但是如果我将值从 1 -> 2 -> 3 更改,它们将被跳过
如果我使用@Binding var progress: Int
,它会起作用
知道如何在 onChange() 中使用 Optionals 吗?
【问题讨论】:
在这里工作正常(如果将可选绑定到可选,则不允许将非可选直接绑定到可选)。你会提供可重现的演示代码吗? 【参考方案1】:这是可选的带有状态和绑定的工作示例:
import SwiftUI
struct ContentView: View
@State private var progress: Int?
var body: some View
CustomView(progress: $progress)
struct CustomView: View
@Binding var progress: Int?
var body: some View
Button("update")
if let unwrappedInt = progress progress = unwrappedInt + 1
else progress = 0 //<< █ █ Here: initializing! █ █
.onChange(of: progress) newValue in
if let unwrappedInt = progress print(unwrappedInt)
【讨论】:
是的。我一直在使用进度?然后 progress.completedUnitCount += 1 不起作用。但是每次 new let newProgress = .. 都创建新实例解决了这个问题 Int?对我也不起作用,但也许它不起作用导致其他错误。如果它不起作用,您应该创建新的对象实例并将其分配给@State/@Binding以上是关于SwiftUI 中的可选状态或绑定的主要内容,如果未能解决你的问题,请参考以下文章