我在Swift
中有一个小型iOS程序,列出了餐馆和用户评分。我创建了一个Restaurant类,并将数据存储在数组中
Restaurant(name: "Example", type: "Coffee & Tea Shop", location: "Example Town, NY", phoneNumber: "232-923423", image: "example.jpg", isVisited: false, ratingSave: "")
我为三个按钮对象分配了标签
@IBAction func ratingSelected(sender: UIButton) {
switch (sender.tag) {
case 100: rating = "dislike"
case 200: rating = "good"
case 300: rating = "great"
default: break
}
我的问题是,每当用户离开屏幕提供评级时,评级都会消失。我将变量ratingSave添加到我的类中,我希望该变量更新为三个标记之一(或我为其分配标记的字符串)。我还希望isVisited在应用评级时更新为true。我该怎么做?
答案 0 :(得分:2)
每个不同的评级都有三个按钮......
所以创建三个动作。每个按钮一个。
@IBAction func dislikeSelected() {
rating = "dislike"
}
@IBAction func goodSelected() {
rating = "good"
}
@IBAction func greatSelected() {
rating = "great"
}
因为您根本不再使用该按钮,所以可以删除输入参数。
现在您根本不必担心标签。
为了“保存”您需要通过餐厅作为房产进行评级,然后更新它......
var restaurant: Restaurant?
现在为您的更新方法...
@IBAction func dislikeSelected() {
guard let selectedRestaurant = restaurant else {return}
selectedRestaurant.rating = "dislike"
}
正如@Abizern所说,rating
属性作为枚举而不仅仅是字符串会更好。
在您的餐馆文件中,您可以将其定义为......
enum Rating {
case None
case Dislike
case Good
case Great
}
并将rating
属性的类型从String
更改为Rating
。
现在你的评级功能可以......
@IBAction func dislikeSelected() {
guard let selectedRestaurant = restaurant else {return}
selectedRestaurant.rating = Rating.Dislike
}