扩展中的变量getter的未知错误

时间:2017-09-05 07:17:40

标签: ios swift

我正在尝试使用类似

的扩展名向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 {)。我做错了什么?

2 个答案:

答案 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子类

但是,您的getset块也存在一些问题

你正在访问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