2017-03-16 19 views
0

我即將建立一個單身人士,但我不確定這是否是正確的解決方案。單身?或者,還有更好的方法?

我有這個問題我有一個類創建一個URLSessionTaskDelegate。我想在另一個類中使用該委託從文件上傳中獲取一些信息。

所以我在想如果我可以把這個加上其他一些信息,在一個對象是這樣的:

public class UploadQueueCellData 
    { 
     let _FileName:String 
     let _UploadTaskDelegate:URLSessionTaskDelegate 
     let _ImageData:Data 
     init(fileName:String,imageData:Data,uploadTaskDelegate:URLSessionTaskDelegate) 
     { 
      _FileName = fileName 
      _ImageData = imageData 
      _UploadTaskDelegate = uploadTaskDelegate 
     } 

.... etc 
} 

然後將其存儲在單用數組裏面:

 public class ImageUploadQueue 
    { 
     private var _queue = [UploadQueueCellData]() 
     private let imageUploadQueue:ImageUploadQueue? = nil 
     public func GetImageUploadQueueInstance() -> ImageUploadQueue 
     { 
      if imageUploadQueue == nil 
      { 
       imageUploadQueue = ImageUploadQueue() 
       return imageUploadQueue 
      } 
      else 
      { 
       return imageUploadQueue! 
      } 
     } 
     private init() 
     { 

     } 
    .... etc 
} 

,然後只是用它來更新信息,因爲在另一個類中發生更改。

但沒有一個單身人士還有更好的方法嗎?我是否從Swift 3的角度來看待單身人士?

編輯:

所以我看到我做的單錯:

public class ImageUploadQueue 
{ 
    private var _queue = [UploadQueueCellData]() 
    //private let imageUploadQueue:ImageUploadQueue? = nil 
    static let shared = ImageUploadQueue() 

    private init() 
    { 

    } 

那會更好呢?但問題仍然是沒有比使用單例模式更好的方法嗎?我說得更好,因爲我認爲單身模式是最後的選擇。

+2

哪裏是單身?,我不能在代碼 –

+0

@MikeAlter'GetImageUploadQueueInstance地方找到singletone()'返回「單」(綁定到每個ImageUploadQueue ... OK不是真正的單例模式。) – kennytm

+0

@MikeAlter以及我可能會用錯誤的方式來製作它。 ImageUploadQueue是我打算成爲一個單身人士的類,但我通常是一個.net開發人員 – Helbo

回答

0

我發現我的問題是由於我無法在一個視圖中創建的類在另一個視圖中顯示信息而產生的。我解決這個問題的方法是在單身解決方案上面工作,但是我對使用該解決方案感到骯髒。

我終於找到了一個不同的方式來做到這一點。而不是單身的我剛剛創建了一個包含就像單上面做了這樣的數組類:

public class ImageUploadQueue 
{ 
    private var _queue = [UploadQueueCellData]() 
    ....//Class specific code 
} 

,然後只用該類作爲數據的引用,正如與異常的單是我的課是 上面有這個功能使視圖使用該信息在隊列中

public func GetUploadQueue()->ImageUploadQueue 
{ 
     return _networkRequester.uploadQueue 
} 

但是,這種類是由viewA創建,我需要在ViewB的信息。 所以我做了這個在viewB

var uploader:ImageUpload 
{ 
    get 
    { 
     return ((self.tabBarController!.viewControllers![0] as? UINavigationController)?.viewControllers[0] as! ViewController).uploader 
    } 
    set 
    { 
      (self.tabBarController!.viewControllers![0] as! ViewController).uploader = newValue 
    } 
} 

而且它解決了我最初的問題,不能夠在同一時間從viewA獲取信息ViewB避免使用單例。

相關問題