2016-05-18 46 views
0

我有一個重複約8-9次的函數,我試圖減少冗餘。是否可以創建一個函數,該函數採用spefic類型並返回一個數組使用發送的json對象的initlizated類型。只傳遞特定類型作爲函數的參數

電流功能

static func initArray(json: JSON)-> [Event]{ 
     var array = [Event]() 
     json.forEach(){ 
      array.append(Event.init(json: $0.1)) 
     } 
     return array 
    } 

所需的功能

static func initArray<T> (type: T, json: JSON)-> [T]{ 
    var array = [T]() 
    //I get stuck here im not too sure how to initlize the type 
    //Thats why im wondering if it's possible to pass speific types 
    //to the function 
    return array 
} 

回答

1

你初始化的T一個實例,就像任何已知種類的,與任何初始化都提供給它的一個實例。要知道你的選擇是什麼,你通常需要以某種形式約束T。我通常採用的方式是定義一個,我所關心的所有類型都將傳遞給函數採用。在你的情況下,你可以在你的中加入特定的初始化程序。然後,約束T是這種類型的:

protocol SomeProtocol { 
    init(json: JSON) 
} 

class someClass { 
    static func initArray<T:SomeProtocol>(type: T, json: JSON) -> [T] { 
     // Create your objects, I'll create one as an example 
     let instance = T.init(json: json) 

     return [instance] 
    } 
} 

約束泛型類型可以比我展示了什麼更復雜的,所以我建議更多的信息,檢查出的The Swift Programming LanguageGenericsType Constraints部分。