2015-05-15 52 views
8

我有一個swift類需要有一個弱指針指向另一個類中分配的對象數組。我有弱無法應用於非類的類型uiimageview

class myView: UIView 
{ 
    var lines:[CAShapeLayer] = [] 
    weak var avatars : [UIImageView]? 

我得到的是

'弱' 無法適用於非類類型 '[的UIImageView]'

我也試過無濟於事的錯誤:

weak var avatars : [UIImageView?]? 

回答

2

您正在嘗試將weak應用於類型的。 Array是一個結構體。

8

需要有一個弱指針的對象

好數組,作爲錯誤信息告訴你,你不能。數組是一個結構體,而不是一個類。你不能有一個弱結構實例的引用;這是一種值類型,所以它不會做weak內存管理。

也不需要它 - 沒有保留週期的危險,因爲這是一個值類型。你應該問自己爲什麼你認爲它確實需要它。也許你認爲weak和Optional總是在一起,但他們沒有。你已經聲明瞭這是一個可選的數組;這當然夠了。

25

弱不能適用於非類類型:因爲這些都是

這意味着你不能有一個弱引用任何值類型實例(例如數組,字典,字符串,等等)結構不類。你只給出弱類的引用類型(例如UIImage,UIImageView等)。在這種情況下,你試圖給UIImageView Array提供一個弱引用,並且我們知道array是一個值類型,所以這是不可能的。

例如:

weak var str: String? //CompileTime Error(Wrong) 

weak var arr: Array? //CompileTime Error(Wrong) 

weak var imageView: UIImageView? //Correct 

在協議的情況下: 如果我們只是結構類型的協議:

protocol SomeProtocol{ 
    func doSomething() 
} 

我們不能宣佈爲弱這一類型的變量:

weak var delegate: SomeProtocol? //CompileTime Error(Wrong) 

但是,如果我們製作這樣的類型協議:

protocol SomeProtocol: class{ 
    func doSomething() 
} 

我們可以聲明這種類型的變量弱:

weak var delegate: SomeProtocol? //Correct 

我想你很容易理解,爲什麼發生這種情況在協議?

相同的原因:你只給予弱類型,這是類型的

+0

你是一個救世主。謝謝 – ekeith

相關問題