use*_*076 8 weak-references swift
我有一个swift类,需要一个指向另一个类中分配的对象数组的弱指针.我有
class myView: UIView
{
var lines:[CAShapeLayer] = []
weak var avatars : [UIImageView]?
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
'weak'不能应用于非类型'[UIImageView]'
我也试着无济于事:
weak var avatars : [UIImageView?]?
Run Code Online (Sandbox Code Playgroud)
小智 27
弱无法应用于非类类型:
这意味着您不能对任何值类型实例(例如,Array,Dictionary,String等)进行弱引用,因为这些都是struct而不是class.你只给出了类型的弱引用(例如UIImage,UIImageView等).在这种情况下,你试图给UIImageView数组提供弱引用,我们知道数组是一个值类型,所以它是不可能的.
例如:
weak var str: String? //CompileTime Error(Wrong)
weak var arr: Array? //CompileTime Error(Wrong)
weak var imageView: UIImageView? //Correct
Run Code Online (Sandbox Code Playgroud)
如果是Protocol:如果我们只有struct类型的协议:
protocol SomeProtocol{
func doSomething()
}
Run Code Online (Sandbox Code Playgroud)
我们不能将此类型的变量声明为弱:
weak var delegate: SomeProtocol? //CompileTime Error(Wrong)
Run Code Online (Sandbox Code Playgroud)
但是如果我们像这样制作类类型的协议:
protocol SomeProtocol: class{
func doSomething()
}
Run Code Online (Sandbox Code Playgroud)
我们可以将这种类型的变量声明为弱:
weak var delegate: SomeProtocol? //Correct
Run Code Online (Sandbox Code Playgroud)
我想你很容易理解它,为什么会在协议中发生?
同样的原因:你只给出了类型的弱引用
需要有一个指向对象数组的弱指针
好吧,正如错误消息告诉你的那样,你不能.Array是一个结构,而不是一个类.您不能对结构实例有弱引用; 它是一个值类型,因此它不进行weak内存管理.
它也不需要它 - 没有保留周期的危险,因为这是一种值类型.你应该问问自己为什么你认为它确实需要它.也许你认为weak和可选总是在一起,但他们没有.你已经宣布这是一个Optional数组; 这当然足够了.
| 归档时间: |
|
| 查看次数: |
8020 次 |
| 最近记录: |