从 Enum 中获取数据以显示在 UIPickerView 上
Take data from Enum to show on UIPickerView
我正在创建一个简单的视图,其中有一个 UIPickerView,我想从枚举中显示 PickerView 上的选项。我创建了一个可能的饮料枚举
enum drink{
case coffee
case tea
case cola
case water
}
我想知道如何在 UIPickerView 中显示饮料?我正在使用 Swift 1.2 和 Xcode 6.3.1.. 谢谢!! :)
给他们一个字符串并用 rawValue 调用它。
enum Drink: String {
case Coffee = "Coffee"
case Tea = "Tea"
case Cola = "Cola"
case Water = "Water"
}
println(Drink.Coffee.rawValue) // Prints "Coffee"
正如 ABakerSmith 在他的回答中提到的,您也可以使用 printable。在下一个示例中,它与 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"
正如 Leonardo Savio Dabus 提到的,简化版。
你可以像这样使用枚举;
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
如 ABakerSmith
所述,您可以使用可打印协议在 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.rawValue + 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
}
// 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)
}
Apple 在 Swift 4.2 / Xcode 10+ 中引入了 CaseIterable,这使得它更干净。
The compiler can automatically provide an implementation of the CaseIterable requirements for any enumeration without associated values or @available attributes on its cases. The synthesized allCases collection provides the cases in order of their declaration.
示例:
enum Drink: String, CaseIterable {
case coffee = "Coffee"
case tea = "Tea"
case cola = "Cola"
case water = "Water"
}
extension ViewController: UIPickerViewDelegate {
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Drink.allCases[row].rawValue
}
}
extension ViewController: UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return Drink.allCases.count
}
}
您可以在 Github
上使用 UITextField
找到完整示例
我正在创建一个简单的视图,其中有一个 UIPickerView,我想从枚举中显示 PickerView 上的选项。我创建了一个可能的饮料枚举
enum drink{
case coffee
case tea
case cola
case water
}
我想知道如何在 UIPickerView 中显示饮料?我正在使用 Swift 1.2 和 Xcode 6.3.1.. 谢谢!! :)
给他们一个字符串并用 rawValue 调用它。
enum Drink: String {
case Coffee = "Coffee"
case Tea = "Tea"
case Cola = "Cola"
case Water = "Water"
}
println(Drink.Coffee.rawValue) // Prints "Coffee"
正如 ABakerSmith 在他的回答中提到的,您也可以使用 printable。在下一个示例中,它与 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"
正如 Leonardo Savio Dabus 提到的,简化版。
你可以像这样使用枚举;
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
如 ABakerSmith
所述,您可以使用可打印协议在 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.rawValue + 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
}
// 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)
}
Apple 在 Swift 4.2 / Xcode 10+ 中引入了 CaseIterable,这使得它更干净。
The compiler can automatically provide an implementation of the CaseIterable requirements for any enumeration without associated values or @available attributes on its cases. The synthesized allCases collection provides the cases in order of their declaration.
示例:
enum Drink: String, CaseIterable {
case coffee = "Coffee"
case tea = "Tea"
case cola = "Cola"
case water = "Water"
}
extension ViewController: UIPickerViewDelegate {
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Drink.allCases[row].rawValue
}
}
extension ViewController: UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return Drink.allCases.count
}
}
您可以在 Github
上使用UITextField
找到完整示例