从Enum获取数据以显示在UIPickerView Swift上

我正在创build一个简单的视图,其中有一个UIPickerView,我想从一个枚举显示在PickerView上的select。 我创造了一个可能的饮料枚举

enum drink{ case coffee case tea case cola case water } 

我想知道如何在UIPickerView中显示饮料? 我正在使用Swift 1.2和Xcode 6.3.1 ..谢谢! 🙂

正如ABakerSmith所提到的,您可以使用Printable协议在UIPickerView显示String

最后你可以看到如下的ViewController

 // // ViewController.swift // Test // // Created by Stefan Veis Pennerup on 04/05/15. // Copyright (c) 2015 Kumuluzz. All rights reserved. // import UIKit class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { @IBOutlet weak var pickerView: UIPickerView! enum Drink: Int, Printable { case Coffee = 0 case Tea = 1 case Cola = 2 case Water = 3 static var count: Int { return Drink.Water.hashValue + 1 } var description: String { switch self { case .Coffee: return "Coffee" case .Tea : return "Tea" case .Cola : return "Cola" case .Water : return "Water" default: return "" } } } // MARK: - UIPickerViewDataSource func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return 1 } func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return Drink.count.hashValue } // MARK: - UIPickerViewDelegate func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { return Drink(rawValue: row)?.description; } // several optional methods: // func pickerView(pickerView: UIPickerView!, widthForComponent component: Int) -> CGFloat // func pickerView(pickerView: UIPickerView!, rowHeightForComponent component: Int) -> CGFloat // func pickerView(pickerView: UIPickerView!, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString! // func pickerView(pickerView: UIPickerView!, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView! // func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int) } 

给他们一个string,并用rawValue调用它。

 enum Drink: String { case Coffee = "Coffee" case Tea = "Tea" case Cola = "Cola" case Water = "Water" } println(Drink.Coffee.rawValue) // Prints "Coffee" 

正如ABaker Smith在他的回答中提到的,你也可以使用可打印的。 在下一个例子中,与ABakerSmith的方法相比,它有点不同。

 enum Drink: String, Printable { case Coffee = "Coffee" case Tea = "Tea" case Cola = "Cola" case Water = "Water" var description: String { return rawValue } } println(Drink.Coffee) // Prints "Coffee" 

正如莱昂纳多·萨维奥·达布斯所说的那样,一个简化的版本。

你可以像这样使用枚举

 enum drink: String{ case coffee = "coffee" case tea = "tea" case cola = "cola" case water = "water" } 

你可以在这个例子中添加uipickerview;

http://makeapppie.com/tag/uipickerview-in-swift/

我会让Drink符合Printable协议:

Printable协议如下所示:

 protocol Printable { var description: String { get } } 

因此,你的Drink枚举将是:

 enum Drink : Printable { case Coffee case Tea case Cola case Water var description: String { switch self { case .Coffee: return "Coffee" case .Tea : return "Tea" case .Cola : return "Cola" case .Water : return "Water" } } } 

下面是一个在String中使用Drink的例子:

 let myDrink: Drink = .Tea println("I'm drinking \(myDrink)") // I'm drinking Tea