【发布时间】:2020-07-10 22:28:47
【问题描述】:
我刚刚更新到 XCode 11.4,我的一些代码已经停止工作。我在ObservableObject 中有一些@Published 结构变量。以前,当我更新结构上的属性时,didSet 方法会在发布的属性上触发,但现在情况不再如此。这种行为是否有可能在 Swift 的最新更新中被设计改变了?
这是一个简单的例子:
import SwiftUI
struct PaddingRect {
var left: CGFloat = 20
var right: CGFloat = 20
}
final class SomeStore : ObservableObject {
@Published var someOtherValue: String = "Waiting for didSet"
@Published var paddingRect:PaddingRect = PaddingRect() {
didSet {
someOtherValue = "didSet fired"
}
}
}
struct ObserverIssue: View {
@ObservedObject var store = SomeStore()
var body: some View {
VStack {
Spacer()
Rectangle()
.fill(Color.yellow)
.padding(.leading, store.paddingRect.left)
.padding(.trailing, store.paddingRect.right)
.frame(height: 100)
Text(store.someOtherValue)
HStack {
Button(action: {
// This doesn't call didSet
self.store.paddingRect.left += 20
// This does call didSet, ie. setting the whole thing
// self.store.paddingRect = PaddingRect(
// left: self.store.paddingRect.left + 20,
// right: self.store.paddingRect.right
// )
}) {
Text("Padding left +20")
}
Button(action: {
self.store.paddingRect.right += 20
}) {
Text("Padding right +20")
}
}
Spacer()
}
}
}
struct ObserverIssue_Previews: PreviewProvider {
static var previews: some View {
ObserverIssue()
}
}
属性更新,但didSet 没有触发。
是否可以获取结构体的嵌套属性来触发发布者的didSet 方法?
【问题讨论】:
-
奇怪的是,在我升级之前它一直在我的代码中工作,仅此而已。当您看到我的实际问题是“是否可以获取结构的嵌套属性以触发发布者的 didSet 方法”时,我将更改问题的标题
-
@Asperi:我遇到了同样的问题......并且在我更新之前调用了 didSet - 这是真的。也许之前是一个错误......但它有效;)我喜欢这个功能,我错过了......
-
看看这个:stackoverflow.com/a/59391476/8457280。 -> 然后它再次工作;)
标签: ios swift swiftui swift5 observableobject