2016-04-24 137 views
3

self`如果我有一個集合視圖委託助手類,看起來像一個屬性:捕捉`內willSet

weak var delegate: UICollectionViewDelegate? { 
    willSet { 
     self.collectionView?.delegate = newValue 
    } 
} 

self有史以來willSet塊內被捕獲?

與其他塊不同,您不能在will set塊上執行[unowned self][weak self]。如果我有collectionView?.delegate =和self.collectionView?.delegate = , deinit was always called, indicating to me that it doesn't make a difference whether or not self`在setter塊內部使用。

+0

優:

順便說一句,而不是因爲你定義它只是爲了能夠更新的CollectionView的委託財產我會執行該變量的getter和setter!如果你把這個作爲答案,我會接受它。 – barndog

回答

3

它只是一個property observer,而不是一個塊,這意味着它不保留/複製/捕獲任何對象,因此您可以安全地在其中使用self

weak var delegate: UICollectionViewDelegate? { 
    get { 
    return self.collectionView?.delegate 
    } 
    set { 
    self.collectionView?.delegate = newValue 
    } 
} 
+0

這是一個好點,我一定會這樣做。財產觀察員規則是否也適用於'get'和'set'塊? – barndog

+0

是的,他們這樣做。他們根本不是街區。 – ozgur

+0

這只是編譯器認爲是獨立於塊的語法嗎? – barndog