2017-10-12 48 views
0

從API調用接收到String。這個字符串基本上定義了什麼UIImageUILabelUIView的標籤。有9種類型的字符串可以通過此API調用接收。我有以下代碼映射這些:如何將UIImage,UILabel和UIView內容映射到Swift中的字符串?

struct Map{ 
var image : UIImage! 
var title : String! 

func getProperties(stringFromAPI : String) { 
    switch stringFromAPI { 
    case "fireFS": 
     self.image = UIImage(string: "fireFS") 
     self.title = "Fire" 
    case "chromeFS": 
     self.image = UIImage(string: "chrome_FS_1") 
     self.title = "Chromatic" 
    default: 
     break 
    } 
} } 

是否有一個枚舉設置所有這些屬性和全球檢索它的有效方法是什麼?任何幫助將不勝感激和upvoted。謝謝。

回答

1

可以定義一個全局字典,如:

struct ExampleDict { 
    static let data: [String: [String: Any]] = [ 
     "fireFS": [ 
      "imageName": "fireFS", 
      "title": "Fire" 
     ], 

     "chromeFS": [ 
      "imageName": "chrome_FS_1", 
      "title": "Chromatic" 
     ] 
    ] 
} 

在這裏,您爲每個元組爲您從API所期望的字符串,即stringFromAPI的關鍵。然後你可以在這裏添加imageName,title和其他元組。

對於從字典檢索值只是下標它像一個數組:

if let imageName = ExampleDict.data["chromeFS"]?["imageName"] { 
    print(imageName) 
} 

現在,讓我們與您現有的代碼集成這樣的:

func getProperties(stringFromAPI : String) { 

    if let imageName = ExampleDict.data[stringFromAPI]?["imageName"] { 
     print(imageName) 
    } 

    if let imageTitle = ExampleDict.data[stringFromAPI]?["title"] { 
     print(imageTitle) 
    } 
} 

讓我們嘗試了這一點...

getProperties(stringFromAPI: "fireFS") 

/// Output 
// fireFS 
// Fire 

getProperties(stringFromAPI: "chromeFS") 

/// Output 
// chrome_FS_1 
// Chromatic 
1
enum ImageMapping: String { 
     case fireFS = "fireFS" 
     case chromeFS = "chromeFS" 

     func imageName() -> String { 
      switch self { 
      case .fireFS: 
       return "Fire" 
      case .chromeFS: 
       return "Chromatic" 
      } 
     } 
    } 

    func getProperties(stringFromAPI : String) { 
     let mapping = ImageMapping(rawValue: stringFromAPI) 
     self.image = UIImage(string: stringFromAPI) 
     self.title = mapping?.imageName() 

    } 
+0

using this ans更有可能通過使用它的imageName屬性取回枚舉的原始值?這個解決方案看起來不錯,所以我想澄清一下,如果反向查找是可能的。謝謝。 –

+0

然後你需要編寫另一個函數來做到這一點。 – Noot

相關問題