【发布时间】:2023-01-20 21:43:10
【问题描述】:
这是我的数据模型:
@MainActor
class TestModel: ObservableObject {
@Published private(set) var data = ""
private func randomAlphaNumericString(length: Int) -> String {
let allowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let allowedCharsCount = UInt32(allowedChars.count)
var randomString = ""
for _ in 0 ..< length {
let randomNum = Int(arc4random_uniform(allowedCharsCount))
let randomIndex = allowedChars.index(allowedChars.startIndex, offsetBy: randomNum)
let newCharacter = allowedChars[randomIndex]
randomString += String(newCharacter)
}
return randomString
}
func update() {
data = randomAlphaNumericString(length: 10)
}
}
应用程序视图是:
import SwiftUI
struct TestView: View {
@StateObject var model = TestModel()
var body: some View {
VStack {
TestSubView(textData: $model.data)
Button("Update") {
model.update()
}
}
}
}
其中子视图定义如下:
import SwiftUI
struct TestSubView: View {
@Binding var textData: String
var body: some View {
Text("Data : \(textData)")
}
}
使用此代码,由于模型字段数据的私有设置器,我得到了一个编译错误。我怎样才能与私人二传手呆在一起并使这种绑定起作用?应遵循的正确模式是什么?
【问题讨论】:
-
哦...你想让
TextSubView更新datavar 的值吗?如果没有,那么@Binding不是您在这里需要的。@Binding在您希望视图更新值并将该更新写回您的view model时使用。 -
不,我只想用父视图中定义的 Observable 对象更新子视图。
标签: swiftui