【问题标题】:How to use Enums in UITableView properly?如何正确使用 UITableView 中的枚举?
【发布时间】:2016-07-27 09:16:01
【问题描述】:

在我的 ViewController 中,我创建了一个枚举:

enum ItemType: String {
    case Restaurant, Boutique, Resort
}

在didSelect我使用:

self.performSegueWithIdentifier("goToItemsList", sender: ItemType.Restaurant.hashValue)

稍后,在:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "goToItemsList" {
        let itemsListTableViewController = segue.destinationViewController as! ItemsListTableViewController
        itemsListTableViewController.cellType = sender!
    }
}

那么,我现在如何签入我的ItemsListTableViewController

if cellType == .Restaurant {
   // Do something
}

?我知道,为此,我需要执行以下操作:

var a: ItemType

稍后再检查,但我无法在 ItemsListTableViewController 中将 a 的类型设置为 ItemType。

谁能帮我解决这个问题?

【问题讨论】:

  • ItemType(rawValue: sender! as String) == .Restaurent
  • @RJE 但我的第二个 tableviewcontroller 没有看到 ItemType
  • 使用 itemsListTableViewController.cellType = ItemType(rawValue: sender! as String) 假设 cellType 是一个 'ItemType' -- var cellType: ItemType。啊..你的意思是项目类型在第二个 VC 中不可见。如果您在全局范围内定义枚举,其他 swift 类应该会看到它。
  • 另外,在performSegueWithIdentifier 中使用rawValue 而不是hashValue。

标签: ios swift uitableview enums


【解决方案1】:

您可以从 ViewController 访问枚举,例如:

ViewController.ItemType

或者,为了匹配您的示例:

var a : ViewController.ItemType

【讨论】:

    【解决方案2】:

    你可以这样做

    在 didSelectRow 中

    您可以使用 rawValue 属性。它返回“原始”类型的对应值。

    self.performSegueWithIdentifier("goToItemsList", sender: ItemType.Restaurant.rawValue) 
    

    在prepareForSegue中

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "goToItemsList" {
    
      let itemsListTableViewController = segue.destinationViewController as! ItemsListTableViewController
      itemsListTableViewController.cellType = ItemType(rawValue: sender! as? String)
    }
    }
    

    在其他视图控制器中

    var cellType :ItemType?
    

    可以直接查看也可以使用switch

    if let value = cellType {
    
    switch(value) {
    
    case .Boutique: // do something here
     break
    case .Resort: // do something here
    break
    case .Restaurant: // do something here
    break
    }
    
    }
    

    【讨论】:

    • 我在ItemType(rawValue: sender! as String) 收到Cannot assign value of type 'MainViewController.ItemType?' to type 'String' 这个错误
    • 好的。只需制作一个 ItemType var cellType 的 cellType :ItemType?
    • 我的问题就是这样。在我的第二个 VC 中 - ItemType 不可见
    • 只在类外声明ItemType。我的意思是全球。它会解决你的问题。
    • 您可以在第二个类中访问枚举,如上所示。
    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多