2017-09-05 65 views
0

我想添加一个变量UIImageView像这样用于为在扩展

extension UIImageView { 
    var urlSession: URLSessionDataTask? { 
     get { 
      if self.urlSession != nil { 
       return self.urlSession 
      } 
      return nil 
     } 
     set { 
      urlSession?.cancel() 
     } 
    } 
} 

的延伸,但我发现了一个未知的错误(在控制台它只是打印(lldb))可变吸气未知错误获得者if self.urlSession != nil {。我究竟做错了什么?

+0

什么是你想要做的示例代码?你的最终目标是什么? – Sweeper

+0

我只是想添加一个变量到'UIImageView',但我得到错误,并添加getter和setter解决了它,但知道我在运行时出现此错误@Sweeper –

+0

您正在访问self(urlSession)get block of self urlSession),它会创建无限循环,只需暂停执行程序按钮即可获得主意 –

回答

2

由于extension不提供存储库属性的功能,你必须使用子类imageView

但是你getset块也有一些问题

您正在访问self(urlSession)中获取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

3

因为你想获得urlSession属性,并且你打电话get,在get里面你再次重复这个动作。你只是得到无限循环。

您应该使用存储的属性,但扩展名可能不包含存储的属性,因此解决方案是子类

试试这个代码:

import UIKit 

class CustomImageView: UIImageView { 
    var urlSession: URLSessionDataTask? { 
     willSet { 
      urlSession?.cancel() 
     } 
    } 
} 

let image = CustomImageView() 
image.urlSession = URLSessionDataTask() 
+0

但getter需要返回语句 –

+0

@Amir_P,你调用getter内部getter和方法不能返回任何东西。 –