Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 基于按钮按下更新变量_Ios_Arrays_Swift_Switch Statement - Fatal编程技术网

Ios 基于按钮按下更新变量

Ios 基于按钮按下更新变量,ios,arrays,swift,switch-statement,Ios,Arrays,Swift,Switch Statement,我在Swift的Swift中有一个小的iOS程序,它列出了餐厅和用户评级。我创建了一个Restaurant类,并将数据存储在数组中 Restaurant(name: "Example", type: "Coffee & Tea Shop", location: "Example Town, NY", phoneNumber: "232-923423", image: "example.jpg", isVisited: false, ratingSave: "") 我为三个按钮对象指定了

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

不要使用标签 您有三个按钮用于每个不同的分级

因此,创造三个行动。每个按钮一个

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

您需要引用当前的
餐厅
实例,即当前将被评级的餐厅,并相应地更改属性
评级保存
<代码>isVisited可以是计算属性
!ratingSave.isEmpty
。不要在视图上使用
标记
属性。@Abizern哈哈哈!是的。我认为评级最好用枚举表示,而不仅仅是传递字符串。@Abizern oh绝对:)只是因为OP的问题才这样做的。我会更新答案的。谢谢你们!“我对编程很陌生,你帮了我很多。”pyogen很乐意帮忙。苹果公司生产的iTunes上有一本电子书。这是免费的,是一个优秀的介绍斯威夫特。你应该读一下。