美文网首页
Swift delegate

Swift delegate

作者: 不離 | 来源:发表于2017-03-29 09:22 被阅读654次

ARC 中,对于一般的 delegate,在声明中将其指定为 weak,在这个 delegate 实际的对象被释放的时候,会被重置回nil, 在Swift中和OC有些不同,如下所示

图片:

文本:

importUIKit

protocol MyDelegate:NSObjectProtocol{

funcmyMethod()

}

class My {

weak var delegate:MyDelegate?

}

class Demo:UIViewController,MyDelegate{

funcmyMethod() {

print("myMethod")

}

override func viewDidLoad() {

letmy =My()

my.delegate=self

}

}

/**

* 如果不加NSobjectProtocol,那么则会报错,报错内容error: 'weak' may only be applied to class and class-bound protocol types, not 'MyDelegate' weak var delegate: MyDelegate?

* 原因:Swift的protocol是可以被除了class以外的其他类型遵守的,而对于像struct或是enum这样的类型不通过引用计数来管理内存,所以不能用weak这样的ARC的概念来进行修饰。

* 解决办法:Swift中使用weak delegate,需要将protocol限制在class中

* 在protocol后面加入以下两种

1.NSObjectProtocol让协议遵循NSObjectProtocol这个协议

2.class限制协议只用在class中

*/

相关文章

  • swift delegate 和 block 使用

    swift delegate 和 block 使用 delegate使用 //自定义cell 代码importUI...

  • delegate

    Swift的delegate 用weak修改的时候的注意事项Swift-代理

  • Swift小知识

    1. 关于Swift中Protocol 1. 在 Swift 中,Delegate 就是基于 Protocol 实...

  • swift delegate

  • Swift delegate

    ARC 中,对于一般的 delegate,在声明中将其指定为 weak,在这个 delegate 实际的对象被释放...

  • Swift - Delegate

    在ARC中,对于一般的delegate,我们会在声明中将其指定为weak,在这个delegate实际的对象被释放的...

  • About iOS programming: Delegate

    关于Delegate设计模式. From Hacking with Swift, Project 4. Deleg...

  • swift delegate 使用

    1、声明一个deleagte @objc protocol MVPTabBarDelegate : NSObjec...

  • Swift weak delegate

    需要使用delgate时,为了防止循环引用需要添加weak关键字,但是上面的代码XCode会报错。因为swift里...

  • Swift 之 delegate

    一 代理的理解Delegate 是IOS开发一个比较重要的概念,反正我开发的时候遇到很多,所以不熟悉也得熟悉,刚开...

网友评论

      本文标题:Swift delegate

      本文链接:https://www.haomeiwen.com/subject/lpceottx.html