从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;
我会让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