开发者社区> 吞吞吐吐的> 正文

【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


本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/5561149.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
usermod命令/用户密码管理/mkpasswd命令
3.4 usermod命令  3.5 用户密码管理 3.6 mkpasswd命令 usermod命令   设置用户uid: usermod  -u  111 username 设置用户gid usermod  -g   gid   username 设置用户家目录 usermo...
1104 0
使用thrift做c++,java和python的相互调用
linux上安装thrift见 http://jinghong.iteye.com/blog/1102535 thrift做为跨语言调用的方案有高效,支持语言较多,成熟等优点;代码侵入较强是其弱点。
880 0
Swift基础--使用TableViewController自定义列表
<p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px"> 首先建立一个swift项目,把storyboard的内容删掉,添加一个Navigation Controller,然后
962 0
RxSwift使用教程大全 韩俊强的博客
接上一篇:初识RxSwift及使用教程 韩俊强的博客 本文档内容来自于 RxSwift 的 Playground。记录大多数 ReactiveX 的概念和操作符。 (部分翻译和注解来自 ReactiveX文档中文翻译) Introduction 为什么使用 RxSwift? 我们写的很多代码实际上是为了解决和响应外部事件。
1796 0
在 Xcode 项目中使用 swift package fetch
本文讲的是在 Xcode 项目中使用 swift package fetch,到目前为止,Cocoa with Love 的 git 仓库都使用“git subtrees”来管理相关依赖,所有的依赖都被拷贝并静态存放于依赖方目录下。我希望能找到一种更动态地依赖管理方式来代替现有的方案
1533 0
最新Swift学习教程-从简单到复杂 韩俊强的博客
GitHub每日更新地址: https://github.com/iOS-Swift-Developers/Swift Swift基础知识大全,Swift学习从简单到复杂,不断地完善与更新, 欢迎Star️,欢迎Fork,️iOS开发者交流群:446310206 知识架构: 常两变量 基.
1040 0
4850
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载