【发布时间】:2020-09-15 22:21:19
【问题描述】:
我有一个 SwiftUI 问题,看起来不像是已回答或与另一个问题重复,而且 SwiftUI 是相当新的。
根据我的理解,以下代码显示了 Button 控件的背景切换。喜欢的数量按预期增加,但状态更改似乎没有传递到 Book 结构。
我读到的所有内容都是在预览中,您需要使用:
.constant(x) 在 PreviewProvider 的视图中。
但是,它不起作用,带有点赞的按钮既不是前景色,也不是背景色。
在调试应用程序时,isLiked 书的结果确实发生了变化。但是前景色/背景色没有。
这是视图的代码。
import SwiftUI
struct BookDetailView: View {
@Binding var book: Book
@State var likes: Int = 0
var body: some View {
VStack {
Text(book.title)
Image(book.imageName)
.resizable()
.aspectRatio(contentMode: .fit)
.scaledToFit()
Button(action: {
self.book.isLiked.toggle()
self.likes = self.likes + 1
}) {
Text("???? Like \(likes)")
.padding()
.foregroundColor(self.book.isLiked ? .secondary : .primary)
.background(self.book.isLiked ? Color.rayWenderlichGreen : Color.white)
.cornerRadius(10)
}
}
}
}
struct BookDetailView_Previews: PreviewProvider {
static var previews: some View {
BookDetailView(book: .constant(Book.demoBooks.randomElement()!))
}
}
这是实际的书籍模型
import SwiftUI
struct Book: Identifiable {
var id = UUID()
var title: String
var imageName: String
var isLiked = false
}
extension Book: Equatable {
static func == (lhs: Book, rhs: Book) -> Bool {
return lhs.id == rhs.id
}
}
我花了一些时间试图了解为什么会发生这种情况,看起来这可能只是 SwiftUI 的一个错误。
有什么想法或建议吗?
【问题讨论】:
标签: swift xcode binding swiftui