根据按下按钮更新变量

时间:2015-10-06 14:32:26

标签: ios arrays swift switch-statement

我在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。我该怎么做?

1 个答案:

答案 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"
}

使用枚举: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
}