根据按下按钮更新变量

Update variable based on button press

我在 Swift 中有一个 iOS 小程序,可以列出餐馆和用户评分。我创建了一家餐厅 class,并将数据存储在数组中

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 添加到我的 class,我希望该变量更新为三个标签之一(或我将标签分配给的字符串)。我还希望 isVisited 在应用评级时也更新为 true。我该怎么做?

不要使用标签

每个不同的评级都有三个按钮...

所以创建三个动作。每个按钮一个。

@IBAction func dislikeSelected() {
    rating = "dislike"
}

@IBAction func goodSelected() {
    rating = "good"
}

@IBAction func greatSelected() {
    rating = "great"
}

因为您根本不再使用该按钮,所以您可以删除输入参数。

现在您完全不用担心标签了。

正在保存评分

为了 "save" 您需要将餐厅作为 属性 传递,然后更新它...

var restaurant: Restaurant?

现在介绍您的更新方法...

@IBAction func dislikeSelected() {
    guard let selectedRestaurant = restaurant else {return}

    selectedRestaurant.rating = "dislike"
}

使用枚举 :D

正如@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
}