PonySwiftSwift开发实战

weak delegate

2015-10-02  本文已影响303人  sprint

delegate委托模式是一种常用的设计模式 ,我们通常将声明为delegate属性指定为weak,在这个delegate的实际的对象被释放时会被置为nil。在swift中我们也许会写出这样的代码:

protocol MyDelegate {

    func method()

}

class MyClass {

   weak var delegate:MyDelegate? //会编译错误 

}

在delegate声明出会编译出错 “weak cannot be applied to non-class type MyDelegate”,

这是因为Swift的protocol是可以被 class struct enum这几种类型遵守,而对于struct enum这样的类型,本身就不能通过引用计数来管理内存,所以不能通过weak概念的关键字修饰。

要想在Swift中使用weak delegate,我们可以通过下面两种方式。

1,将protocol限制在class内实现。

protocol MyDelegate : class {

    func method()

}

2,将protocol声明为Object-C的,这样可以通过在protocol前面加上@objc,  Object-C的protocol只有类能实现,这样就合理了。

@objc protocol MyDelegate {

      func method()

}

相比起@objc, clasc更能表现出问题实质,可以说是更好的解决方式。

上一篇下一篇

猜你喜欢

热点阅读