2017-05-08 37 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