zoukankan      html  css  js  c++  java
  • 【swift学习笔记】五.使用枚举优雅的管理Segue

      在做页面转跳的时候,我们要给Segue命名,如果Segue多了,管理他们就是一个恶梦。我们可以枚举更优雅的管理这些Segue。

      1.我们先来建立一个protocol,他的功能就是让实现类实现一个SegueIdentifier别名,这个SegueIdentifier必需为RawRepresentable类型,在后边我们就会用

    protocol SegueHandlerType {
        associatedtype SegueIdentifier: RawRepresentable
    }

      2.我们要对上边的protocol扩展,并且实现protocol必须为UIViewControl,SegueIdentifier的原值要为String类型

    这个扩展有两个方法一个是用要实现的别名来调用执行Segue方法performSegueWithIdentifier。另一个方法segueIdentifierForSegue通过Segue的identifier来得到SegueIdentifier.

    extension SegueHandlerType where Self: UIViewController, SegueIdentifier.RawValue == String {
        func performSegueWithIdentifier(segueIdentifier: SegueIdentifier, sender: AnyObject) {
            performSegueWithIdentifier(segueIdentifier.rawValue, sender: sender)
        }
        
        func segueIdentifierForSegue(segue: UIStoryboardSegue) -> SegueIdentifier {
            guard let identifier = segue.identifier,
                segueIdentifier = SegueIdentifier(rawValue: identifier)
            else {
                fatalError("invalid segue identifier (segue.identifier)")
            }
            return segueIdentifier
        }
    }

      3.用ViewController实现SegueHandlerType。再用一个枚举来实现SegueIdentifier并且为String,里面有两个case这两个就要我们要打开的新窗体的名称。

    下边有两个按钮Action是用SegueIdentifier枚举来打开相应的窗体。

    class ViewController: UIViewController, SegueHandlerType {
    
        enum SegueIdentifier: String {
            case ShowView1
            case ShowView2
            
        }
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        @IBAction func openView1(sender: AnyObject) {
            performSegueWithIdentifier(.ShowView1, sender: self)
        }
        @IBAction func openView2(sender: AnyObject) {
            performSegueWithIdentifier(.ShowView2, sender: self)
        }
    }

      4.新建两个新窗体,分别用Segue联接这两个窗体。这两个Segue分别命名为我们的枚举类型的两个值:“ShowView1”  “ShowView2”。再来两个Button连接后台的两个窗体的Action

     

    源代码:segueTypeDemo.zip

  • 相关阅读:
    oracle-Oracle试题
    webservice-WebService试题
    php-PHP试题
    xml-xml试题
    ajax-Ajax试题
    用java在客户端读取mongodb中的数据并发送至服务器
    表格标记
    HTML常用标记
    Java操作Mongodb 保存/读取java对象到/从mongodb
    Spark Streaming的编程模型
  • 原文地址:https://www.cnblogs.com/li-peng/p/5561149.html
Copyright © 2011-2022 走看看