我有一个在Swift中的类,需要对另一个类中分配的对象数组拥有弱指针。我已经
class myView: UIView
{
var lines:[CAShapeLayer] = []
weak var avatars : [UIImageView]?
我收到的错误是
无法将“weak”应用于非类类型“[UIImageView]”
我也尝试了,但没有成功:
weak var avatars : [UIImageView?]?
我有一个在Swift中的类,需要对另一个类中分配的对象数组拥有弱指针。我已经
class myView: UIView
{
var lines:[CAShapeLayer] = []
weak var avatars : [UIImageView]?
我收到的错误是
无法将“weak”应用于非类类型“[UIImageView]”
我也尝试了,但没有成功:
weak var avatars : [UIImageView?]?
弱引用无法应用于非类类型:
这意味着您不能对任何值类型实例(例如Array,Dictionary,String等)进行弱引用,因为它们都是结构体而不是类。您只能给予类类型的弱引用(例如UIImage,UIImageView等)。在这种情况下,您试图给UIImageView 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:weak var delegate: SomeProtocol? //Correct
我想你很容易理解,为什么这种情况会在协议中发生?
同样的原因:你只提供了一个类类型的弱引用。
您试图将weak
应用于类型为UIImageView
的Array
。 Array
是一个结构体。