可以通过swift

时间:2015-12-08 16:58:10

标签: ios swift enums

我在第一个带有枚举的ViewController中有这个prepareForSegue

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    enum TypeOfSegue {
        case Edit, Create
    }

    if let DestViewController: DetailViewController = segue.destinationViewController as? DetailViewController where segue.identifier == "EditItem" {
        let edit = TypeOfSegue.Edit

    }
    if let DestViewController: DetailViewController = segue.destinationViewController as? DetailViewController where segue.identifier == "CreateNewItem" {
        let create = TypeOfSegue.Create

    }
}

我想将常量编辑或创建传递给我的DetailViewController。如果可能的话,我怎样才能在DetailViewController中保存TypeOfSegue的变量?

1 个答案:

答案 0 :(得分:6)

您可以在DetailViewController

中定义mode属性
class DetailViewController:UIViewController {    
    var mode: TypeOfSegue!
}

接下来你可以填充它

enum TypeOfSegue {
    case Edit, Create
}
class ListViewController:UIViewController {

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if let destViewController: DetailViewController = segue.destinationViewController as? DetailViewController where segue.identifier == "EditItem" {
            destViewController.mode = .Edit
        }
        if let destViewController: DetailViewController = segue.destinationViewController as? DetailViewController where segue.identifier == "CreateNewItem" {
            destViewController.mode = .Create
        }
    }
}

更新

您也可以通过这种方式实施prepareForSegue方法

enum TypeOfSegue: String, CustomStringConvertible {
    case Edit = "EditItem", Create = "CreateNewItem"
    var description: String { return self.rawValue }
}

class ListViewController:UIViewController {
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        guard let
            destViewController = segue.destinationViewController as? DetailViewController,
            identifier = segue.identifier,
            segueType = TypeOfSegue(rawValue: identifier) else { fatalError("Wrong segue") }
        destViewController.mode = segueType
    }
}