首先呢说下结构

一个ViewController

一个ModelViewController

在ModelViewController中定义了一个协议

这个逻辑 从第一个界面进入第二个界面  从第二个界面回到第二个界面并通过协议传值回到第一个界面 打印输出值

ModelViewController.swift

protocol lwkDelegate {//定义协议

func changeString(newString:String)

}

在这个ModelViewControler类中实现一些简单的逻辑

class ModelViewController: UIViewController{

var delegate:lwkDelegate?

var btn:UIButton?

override func viewDidLoad() {

super.viewDidLoad()

btn=UIButton(frame:CGRectMake(110,80,100,20))

btn!.backgroundColor=UIColor.grayColor()

btn!.setTitle("传值回第一个界面",forState:.Normal)

//绑定事件

btn!.addTarget(self,action:#selector(ModelViewController.btnOnClick),forControlEvents: UIControlEvents.TouchUpInside)

self.view.addSubview(btn!)

}

func btnOnClick(){

let str:String = "liuweikai"

delegate!.changeString(str)//调用协议方法

self.dismissViewControllerAnimated(true, completion: nil)

}

在ViewController类中

class ViewController: UIViewController,lwkDelegate{//接受协议

var btn:UIButton?

override func viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view, typically from a nib.

btn=UIButton(frame:CGRectMake(110,80,100,20))

btn!.backgroundColor=UIColor.greenColor()

btn!.setTitle("去二个界面",forState:.Normal)

//绑定事件

btn!.addTarget(self,action:#selector(ViewController.btnOnClick),forControlEvents: UIControlEvents.TouchUpInside)

self.view.addSubview(btn!)

}

func btnOnClick(){

let vc = ModelViewController()

vc.delegate = self //委托方

self.presentViewController(vc, animated: true, completion: nil)

//        self.navigationController?.pushViewController(vc, animated: true)

}

func changeString(newString:String) {//实现协议的方法

print(newString)

}

swift 协议传值的实现的更多相关文章

  1. 属性传值,协议传值,block传值,单例传值四种界面传值方式

    一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N ...

  2. 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器

    1. 协议(Protocol):与OC之间唯一不同的是Swift中的协议不管是属性还时方法全部是必须实现的 /** protocol*/ protocol FullNamed { /** 计算属性申明 ...

  3. Controller之间传递数据:协议传值

    http://itjoy.org/?p=416 前边介绍过从第一个页面传递数据到第二个页面,那么反过来呢我们该如何操作?还是同一个例子,将第二个页面的字符串传递到第一个页面显示出来,这中形式就可以使用 ...

  4. Swift协议(Protocol)

    协议是为方法.属性等定义一套规范,没有具体的实现. 协议能够被类.结构体等具体实现(或遵守). protocol SomeProtocol { // protocoldefinition goes h ...

  5. swift闭包传值

    不知道原理,就知道这么用的,皮毛上的那一点. 寻思着把以前的项目改成swift的,结果了,,, 反向传值 一. //类似于OC中的typedef typealias sendValueClosure= ...

  6. 学习Swift -- 协议(上)

    协议(上) 协议是Swift非常重要的部分,协议规定了用来实现某一特定工作或者功能所必需的方法和属性.类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能.任意能够满足协议要求 ...

  7. Swift - 协议(protocol)

    1,Swift中协议类似于别的语言里的接口,协议里只做方法的声明,包括方法名.返回值.参数等信息,而没有具体的方法实现. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  8. Swift协议+代理

    Swift语言开发中使用协议+代理的用法和oc中是一样的,只不过变得是语法.现在就进入swift的协议+代理. 先上个图,看看我们要实现的效果:  首先是第一个页面,然后点击到第二个页面,最后点击返回 ...

  9. Swift协议

    「协议」(protocol)声明一系列方法.属性.下标等用来约束其「遵循者」,进而保证「遵循者」能够完成限定的工作.「协议」本身不实现任何功能,它仅仅描述了「遵循者」的实现.「协议」能被类.结构体.枚 ...

随机推荐

  1. Byte数组和Int的互相转换

    public static int bytesToInt(byte[] bytes) { int addr = bytes[0] & 0xFF; addr |= ((bytes[1] < ...

  2. webView缩放

    self.webview.scalesPageToFit = YES; 可以让webView内容用缩放手势放大或缩小

  3. JS——无缝滚动

    1.描述——无缝滚动图片 2.代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  4. 牛掰啊,github+svn+FB进行项目开发

    刚刚头脑发热,用svn把自己的github的一个项目下载下来,然后在Flash Builder中导入,然后惊喜的发现项目居然被svn接管了,如图: 当然,你得给你的Flash Builder装SVN插 ...

  5. corosync集群的选举算法

    <Cluster Concepts> http://linux-ha.org/wiki/Cluster_Concepts <Managing Computers with Autom ...

  6. 基于MDK编程STM32程序无法使用,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”

    为方便工作上做测试,移植FreeRTOS到STM32F103xx,先做简单的UART1 printf. 工程编译通过,运行逻辑也确认可行,可就是无法正常打印消息.对比了网上的移植工程也是一致,硬件仿真 ...

  7. DDR工作原理(转)

    源:DDR工作原理 DDR SDRAM全称为Double Data Rate SDRAM,中文名为“双倍数据流SDRAM”.DDR SDRAM在原有的SDRAM的基础上改进而来.也正因为如此,DDR能 ...

  8. linux  指令 备注

    ss命令可用于查看系统的socket的状态.基本上ss是比较符合需求的ss -a 出来的答案比较完整,但是很乱...连dgram及stream都分开了ss -l 比较可能是需要的,这会列出所有正在使用 ...

  9. Nodejs之使用session

    nodejs中使用session的说明. session介绍 为什么使用session: session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登陆信息保存. 当客户访问其他界面时,可 ...

  10. 1、安卓数据存储机制——sharedPreference

    项目中用到的数据存储方式: 1.这个项目里的“个人标签“.”个性签名“页面的文字存储——sharedPreference:我们项目中用到的Preference来保存用户编辑的标签.签名内容,并支持用户 ...