2017-09-05 57 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和方法不能返回任何東西。 –