2016-07-27 2 views
0

나는 SwitfyJson을 사용하여 일반 살균기 기능을 만들려고합니다. 내가 서버 응답을 받고 있어요 어디 현재 모든, 내가 구문 분석있어 다음과 같이이다 :프로토콜을 준수하는 클래스 유형을 전달하는 방법

 let json = JSON(data : networkResponse.data!) 
     let usersJson = json["data"] 
     var users = [User]() 

     for (_,subJson):(String, JSON) in usersJson { 
      let user = User(json: subJson) 
      users.append(user) 
     } 

지금이 모든 내가 반응을 얻고 있었다 반복이다. 제네릭 기능을 사용하려고합니다.

그러나이 "classType"은 Swift에서 사용할 수 없습니다. 이것을 달성 할 수있는 방법이 있습니까? 당신은 당신의 직렬화-방법은 제네릭 형식을 사용할 수 있습니다

static func serializeToArray(json:[String:AnyObject]) { 
    var serializedObjects = [Serializable]() 
    guard let jsonArray = json["data"] as? Array<[String:AnyObject]> else { 
     return [Serializable]() 
    } 

    for jsonDict in jsonArray { 
     serializedObjects.append(Serializable(init:jsonDict)) 
    } 

    return serializedObjects 
} 

답변

0

:

+0

감사합니다, 멋진 대답이 될 것입니다 ! 난 그냥 더 나은 가독성을 위해 일반 이름을 'T'로 변경했습니다 "정적 func serializeToArray (데이터 : NSData, _ : T.Type) -> [T]" – MCMatan

0

은 어쩌면이 당신을 위해 무엇을 찾고있는 더 많은 것이다. 배열의 형식 만 필요한 것 같습니다.

func serializeToArray<SerializableType : Serializable>(data: NSData, serializableType: SerializableType.Type)-> [SerializableType] { 
    // stuff 
    var serializedObjects = [SerializableType]() 
    // more stuff 
    return serializedObjects 
} 

이 방법은, 먼저 개체를 인스턴스화 할 필요없이 함수에 당신의 유형을 전달할 수 있습니다

let users = serializeToArray(data: data, serializableType: User.self) 

반환 된 결과는 다음 유형 [User]

관련 문제