- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我希望用户对电影进行评分。电影从 REST 接口(interface)加载,评级应存储在本地。问题是我不知道如何保留用户的新评分。
我可以从数据库加载评级并更改 MovieRow 中的值,但我不知道如何获取回调以保存更改后的评级。
这是我所拥有的:
struct RatingView: View {
@Binding var rating: Int
var maximumRating = 5
var offImage: Image?
var onImage = Image(systemName: "star.fill")
var offColor = Color.gray
var onColor = Color.yellow
var body: some View {
HStack {
ForEach(1..<maximumRating + 1) { number in
self.image(for: number)
.foregroundColor(number > self.rating ? self.offColor : self.onColor)
.onTapGesture {
self.rating = number
}
}
}
}
func image(for number: Int) -> Image {
if number > rating {
return offImage ?? onImage
} else {
return onImage
}
}
}
struct MovieRow: SwiftUI.View {
let movie: Movie
@State var ownRating: Int
var body: some SwiftUI.View {
ZStack(alignment: Alignment(horizontal: .leading, vertical: .bottom)) {
ZStack(alignment: Alignment(horizontal: .trailing, vertical: .top
)) {
KFImage(movie.fullPosterURL)
.cancelOnDisappear(true)
.resizable()
.frame(height: 250)
RatingView(rating: $ownRating)
.padding([.top, .trailing], 20.0)
}
Text(movie.title)
.font(.largeTitle)
.padding(.all)
.background(Color(.darkGray)
.opacity(0.5))
.foregroundColor(.white)
}
}
}
struct MovieListView: View {
@ObservedObject var viewModel = MovieViewModel()
var body: some View {
List{
ForEach(viewModel.movies) { movie in
MovieRow(movie: movie, ownRating: self.viewModel.ratingForMovieId(id: movie.id))
.listRowInsets(EdgeInsets())
}
}
}
}
class MovieViewModel: ObservableObject{
private let provider: NetworkManager?
private let ratingModel = RatingModel()
@Published var movies = [Movie]()
init(provider: NetworkManager? = NetworkManager(), movies: [Movie] = []) {
self.provider = provider
self.movies = movies
loadNewMovies()
}
func loadNewMovies(){
provider?.getNewMovies(page: 1) {[weak self] movies in
print("\(movies.count) new movies loaded")
self?.movies.removeAll()
self?.movies.append(contentsOf: movies)}
}
func ratingForMovieId(id: Int)->Int{
return ratingModel.ratingForMovieId(movieId: id)
}
}
class RatingModel{
let realm = try! Realm()
func ratingForMovieId(movieId: Int)->Int{
let result = realm.objects(MovieRating.self).filter("movieId = %@", movieId)
guard let movieRating = result.first else{
return 0
}
return movieRating.rating
}
func updateRating(movieId: Int, rating: Int){
try! realm.write {
realm.create(MovieRating.self, value: ["movieId": movieId, "rating": rating], update: .modified)
}
}
}
最佳答案
要给出具体答案,您必须提供有关数据库/ViewModel/REST 接口(interface)的更多信息
一些可能会解决您的问题的内容 @State var ownRating: Int
到 @Binding var ownRating: Int
。 State
旨在仅在 View 中使用,并且应声明为 private
,Binding
将传递与 ViewModel< 的连接
激活 onTapGesture
时,引用您的 ViewModel
并使用 REST 接口(interface)预先建立的 save()/update() 。
如果您的保存/更新方法需要对象/id,您可能必须将整个 Movie
对象或 id
变量传递给 RatingView
坚持下去。
评分更改时用户界面的刷新取决于发生某事的“ping”或“通知”。 SwiftUI 及其教程在这方面严重依赖 CoreData。
我对 Realm 不熟悉,但这是我能收集到的关于它的信息。 Realm
具有 NotificationTokens
,它将为可观察对象中的 SwiftUI 更新提供所需的通知。
获取 ListView 的对象 - How to use Realm with SwiftUI
入门指南 - https://realm.io/docs/swift/latest/
带有 UITableView 查询代码的教程应该是您所需要的 - https://academy.realm.io/posts/meetup-jp-simard-mastering-realm-notifications/
使用观察
Realm 对象对 ListView 进行故障排除 - Index out of bounds when using Realm with SwiftUI
创建领域数据模型并保存 - https://learnappmaking.com/realm-database-swift-getting-started/
您应该使用标准 CRUD 方法创建一个 ObservableObject。
UI 中的Movie
对象 -> Realm 中的 ViewModel.create(newMovie: Movie)
-> 通知/保存 @Published var movie
使用来自 Realm 的新查询
在 ViewModel
init()
从 Realm
检索 [Movie]
-> 设置 NotifiationToken
使用 Realm 的新查询来观察
和@Published var movie
从 UI 更新了 Movie. rating -> Realm 中的 ViewModel.update(updatedMovie) -> 使用 Realm 中的新查询通知/更新 @Published var movie
删除的操作方式与其他操作相同。
关于如何持久化有很多不同的方法,这当然不是最有效的,因为它每次都会检索整个查询,但它应该可以帮助您入门。 NotificationToken 似乎支持使用正确的 NotificationToken.observer
进行精确到字母的更新。
特别针对您的代码。当用户onTapGesture
新评级时,您应该引用viewModel.update(updatedMovie: UpdatedMovie)
,然后 View 将在获取新的电影列表时发生变化
来自 NotificationToken
的 code>。
关于ios - SwiftUI:通过数据库连接实现评级 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60077252/
我正在使用 MySQL 和 PHP 为 Flash 游戏构建数据层。检索关卡列表非常简单,但我在尝试获取关卡的平均评分及其指针信息时遇到了障碍。这是一个示例数据集: 级别表: level_id | l
阅读 schema.org 之后我写了一个小的“丰富代码片段”或者它所谓的什么。我们今天被谷歌找到,但没有显示星级和评级。也许有人对此有经验并且知道事情是如何完成的?它仅取决于微数据还是取决于 中的
有没有一种方法(或 API)可以使远程 SMF 站点排队以获取特定时间范围内的热门/热门主题,比如过去 24 小时?如果没有,关于我如何跟踪它有什么建议吗? 最佳答案 不确定这是否可行,但我知道 SM
有谁知道如何使用 Foursquare API 获取 field 的分数/评级(例如 9.0/10)? 我正在通过无用户访问进行连接。 https://developer.foursquare.com
我正在使用 Sonar 来分析一组相关的项目。 我正在使用 SQALE 评级来证明重构的必要性 我的问题是 SQALE 到技术债务比率映射背后的逻辑是什么? 为什么 SQALE A 评级是技术债务,范
我有一份 FIFA 19 两名球员之间的比赛列表,我希望根据所参加的比赛使用该数据更新我在这两名球员之间的 ELO 评分。我正在尝试使用此数据不断更新最初从 1000 开始的 ELO 评级。 我尝
我无法显示评级元素。它根本就没有出现。所有其他事情都很好 我已经正确地链接了这些: 语义用户界面 CSS ( http://semantic-ui.com/dist/semantic.min.css
我正在开发一个 Java 应用程序,其中涉及使用 Foursquare 来搜索 field 。该应用程序预计也会对场馆进行评级。除了场馆的收视率之外,我已经做了所有我需要做的事情。我阅读了利用 fou
由于我公司的一位客户要求标记图像上的 alt 属性,我遇到了 google maps API 的问题。 我在谷歌官方文档中找不到任何内容(即:https://developers.google.com
有人可以给我一个 onRate() 的例子吗? Semantic UI 中评级小部件的回调函数 ( http://semantic-ui.com/modules/rating.html#/settin
我有四个主表- 1.user(user_id, name,...) 2. post(post_id, description, ...) 3.comment(comment_id,user_id,co
我已登录并获取身份验证 token ,但当我单击“赞”按钮时,YouTube 评级不起作用。我还需要做什么才能让它发挥作用?如果我在网络浏览器中使用该网址,它会要求授权并执行,然后它就可以工作。但从应
我正在使用我在网上找到的一些评级系统 CSS。目前我能够让它工作,但是当显示多个评级时会出现问题。 只有最后一个分级类有效。 .rate { float: left; pointer-even
我安装了一个应用程序 django- ratings。我想要syncdb,但这是我的错误: djangoratings.vote: 'user' defines a relation with the
每个人都喜欢在他们的网站上显示 Digg/Tweet/Like 徽章,而 Disqus Comment System开始接管。 (来源:disqus.com) (来源:digg.com) 从开发人员的
我有一个 Bootstrap Rating 组件,我必须使用 on-leave 方法来调用我的 javascript 函数。除了 IE 之外,所有其他浏览器也在单击事件上执行 on-leave 函数。
我正在用 Rating Bootstrap 做一个 MVC 应用程序。 我也定义了这个...为了知道点击了多少开始。 $(document).ready(function () {
我想按人口统计(性别、年龄组)收集 IMDb 评级详细信息。 当我尝试在 imdbpy 中使用 get_movie_vote_details 模块时,我的输出为空。这是我的代码: import im
我正在尝试使用 PHP 和 SoapClient 来利用 UPS Ratings 网络服务。我找到了一个名为 WSDLInterpreter 的好工具来创建用于创建服务请求的起点库,但无论我尝试什么,
我正在尝试向现有表格添加“评级”系统(即 1 星、2 星或差、一般、好、优秀等)。有谁知道在 .Net 或免费的第 3 方控件中通过良好的 UX 实现美观的方法? 谢谢 最佳答案 检查 ASP.NET
我是一名优秀的程序员,十分优秀!