2015-10-06 121 views
1

我有一個小型的iOS程序Swift列出了餐館和用戶的評級。我創建了一個餐廳類,和存儲的數據在數組這樣基於按鈕按下更新變量

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

你需要參考目前'Restaurant'情況下,這是會在一瞬間被評爲和更改屬性'餐廳ratingSave '相應地。 'isVisited'可以是一個計算的屬性'!ratingSave.isEmpty'。 – vadian

+0

請勿在視圖上使用'tag'屬性。 – Fogmeister

回答

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表示,作爲一個枚舉,屬性會更好,而不僅僅是字符串。

裏面你的餐館文件,你可以將它定義成...

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 
} 
+1

模具,標籤,死亡! – Abizern

+0

@Abizern哈哈哈!真正。 – Fogmeister

+1

我認爲該評級更好地表達爲一個枚舉,而不僅僅是傳遞字符串。 – Abizern