【发布时间】:2021-11-30 13:07:24
【问题描述】:
大家好,我在 swiftUI 中理解 @State 时遇到问题
我会更好地解释...正如您从滚动视图中的图像中看到的那样,我有两个视图,一个包含日历,另一个包含用户选择日期的摘要。
现在...我曾经用用户在日历上选择的日期更新 summaryView
@State private var selectedDate: Date = Self.now
private static var now = Date ()
同样在包含用户选择摘要的视图(日历上方的视图)中,还有一个用函数创建的随机黄色字符串
// MARK: - Generate Random String
private extension Reservations {
func generateRandomString(length: Int) -> String {
let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var s = ""
for _ in 0 ..< length {
s.append(letters.randomElement()!)
}
return s
}
}
每次用户在日历上选择一天时都会发生变化。
我的问题是当用户选择一个日历日时,应用程序只需在摘要视图中更改日期,而不必再次重复“randomString”函数
这个问题是由于使用@State 我理解正确吗?我应该使用什么而不是 @State 来更改不在同一个视图中的单个值?
struct Reservations: View {
@Environment(\.calendar) private var calendar
@State private var selectedDate: Date = Self.now
private static var now = Date()
var body: some View {
Summary()
ReservationsCalendar()
}
}
// MARK: - Generate Random String
private extension Reservations {
func generateRandomString(length: Int) -> String {
let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var s = ""
for _ in 0 ..< length {
s.append(letters.randomElement()!)
}
return s
}
@ViewBuilder func Summary() -> some View {
HStack(spacing: 10) {
HStack {
Text(selectedDate.dayFormatted(style: .twoDigits))
.font(.title.bold())
Text("ID").foregroundColor(.white)
Text(generateRandomString(length: 7).uppercased())
.foregroundColor(.yellow)
.padding(.horizontal, 10)
.frame(height: 25)
.background(
Capsule()
.fill(.black.opacity(0.2))
)
}
}
}
@ViewBuilder private func ReservationsCalendar() -> some View {
ReservationsCal(currentDate: $selectedDate)
}
}
【问题讨论】:
-
我不清楚
generateRandomString何时或如何被调用。你能加入minimal reproducible example吗? -
@jnpdx 我更新了我的问题`..我输入了我的部分代码只是为了让你更好地理解
标签: ios swift xcode swiftui view