我正在尝试使用类似
的扩展名向UIImageView
添加变量
extension UIImageView {
var urlSession: URLSessionDataTask? {
get {
if self.urlSession != nil {
return self.urlSession
}
return nil
}
set {
urlSession?.cancel()
}
}
}
但是我在getter (lldb)
中收到一个未知错误(在控制台中只是打印if self.urlSession != nil {
)。我做错了什么?
答案 0 :(得分:3)
因为您想要获取urlSession属性,并且在get
内调用get
,所以您再次重复此操作。你只是得到无限循环。
您应该使用存储属性,但扩展名可能不包含存储的属性,因此解决方案是子类化。
试试这段代码:
import UIKit
class CustomImageView: UIImageView {
var urlSession: URLSessionDataTask? {
willSet {
urlSession?.cancel()
}
}
}
let image = CustomImageView()
image.urlSession = URLSessionDataTask()
答案 1 :(得分:2)
由于extension
不提供商店属性的功能,您必须使用imageView
的子类
但是,您的get
和set
块也存在一些问题
你正在访问self(urlSession)中的get block of self(urlSession),它会创建无限循环,
请检查相同的示例代码
class MyImageView:UIImageView {
private var dataTask:URLSessionDataTask? = nil
var urlSession: URLSessionDataTask? {
get {
if dataTask != nil {
return dataTask
}
return nil
}
set {
dataTask?.cancel()
}
}
}
在此,您需要根据dataTask
&管理get
变量。 set
已更改urlSession