【问题标题】:Update variable based on button press基于按钮按下更新变量
【发布时间】:2015-10-06 14:32:26
【问题描述】:

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

【问题讨论】:

  • 您需要引用当前的Restaurant 实例,即当前要被评级的餐厅,并相应地更改ratingSave 的属性。 isVisited 可以是计算属性 !ratingSave.isEmpty
  • 不要在视图上使用tag 属性。

标签: ios arrays swift switch-statement


【解决方案1】:

不要使用标签

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

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

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

【讨论】:

  • @Abizern 哈哈哈!是的。
  • 我认为评级最好用枚举表示,而不是仅仅传递字符串。
  • @Abizern 哦,绝对:) 只是因为 OP 的问题才这样做。不过会更新答案。
  • 谢谢你们!我真的是编程新手,你帮了我很多。
  • @pyogen 很乐意为您提供帮助。可以通过 Apple 制作的 iTunes 获得电子书。它是免费的,是 Swift 的绝佳介绍。你应该读一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2019-03-22
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2021-06-18
相关资源
最近更新 更多