2017-05-08 39 views
2

我需要建立在斯威夫特泛型類單身,但通用類斯威夫特鴕鳥政策支持靜態存儲性能,那麼這個方法aren`t有效如何使一個單身一個通用類斯威夫特

public final class ApiClient<T>: ApiClientFor<T> where T:EntityType {   

     // Method 1 

     class var shared: ApiClient<T> { 
      struct Static { 
       static let instance = ApiClient<T>() 
      } 
      return Static.instance 
     } 

     //Or more simple Method 2 

     static let instance = ApiClient<T>() 
} 
+1

可能的重複? [創建通用單例](http://stackoverflow.com/q/29570027/2415822),[在Swift中結合泛型和擴展?](http://stackoverflow.com/q/24043898/2415822) – JAL

回答

0

這裏的基本問題是,你正在創建一個單身人士的整個家庭(每個參數化類型一個),每個單身人士需要存儲(或引用)靜態上下文。單身人士需要通過他們存儲的類型進行索引。

我建議創建用來存儲你單身一個單一的全球性詞典,由它們的類型的字符串描述索引:

var singletons_store : [String, AnyObject] 

然後在你的計算shared變量,你在那家商店,其對應的單看到參數化類型:

class var shared : APIClient<T> { 
    let store_key = String(describing: T.self) 
    if let singleton = singletons_store[store_key] { 
     return singleton as! APIClient<T> 
    } else { 
     let new_singleton = APIClient<T>() 
     singleton_store[store_key] = new_singleton 
     return new_singleton 
    } 
} 
+0

謝謝!這爲我工作! – fonologico