Swift에서 AnyClass
의 인스턴스를 가져 와서 해당 유형의 배열을 선언하는 방법이 있습니까?AnyClass 객체에서 Swift Declared Typed Array
예를 들어, Overcoat 및 Mantle을 사용하여 JSON 응답을 프레임 워크에서 CoreData에 유지되는 모델로 매핑합니다. 요청 받기 전에 핵심 데이터 컨텍스트에서 수동으로 가져 오기 요청을 수행하고 모든 지속 된 모델을 다시 수신합니다. 그런 다음 MTLManagedObjectAdapter
을 사용하여 NSManagedObjects
을 일반 모델로 다시 가져와 페치 요청의 결과를 내 모델 개체에 매핑해야합니다. 내가 var transformed: [modelClass] = []
으로 만 작동하지 않는 분명한 이유 선언 transformed
수있을 싶어요
class func mapResults(results: [NSManagedObject], toModelClass modelClass: AnyClass) -> ([AnyObject], [NSError?]) {
var transformed: [AnyObject] = []
var errors: [NSError?] = []
for result in results {
var error: NSError? = nil
var model: AnyObject! = MTLManagedObjectAdapter.modelOfClass(modelClass, fromManagedObject: result, error: &error)
transformed.append(model)
errors.append(error)
}
return (transformed, errors)
}
:이를 위해
, 나는 내가 기본 모델 클래스에 정의 된 함수를했다. 해당 AnyClass
개체를 형식으로 변환 할 수있는 방법이 있습니까? 아니면 Swift에서 지금 바로 사용할 수 없습니까?
let (transformed, errors) = Mapper.mapResults(results, toModelClass: MyModel.self)
MTLManagedObjectAdapter.h
에 따라 또한
,
// modelClass - The MTLModel subclass to return. This class must conform to
// <MTLManagedObjectSerializing>. This argument must not be nil.
그래서 당신은해야한다 :
class Mapper {
class func mapResults<T: AnyObject>(results: [NSManagedObject], toModelClass modelClass: T.Type) -> ([T], [NSError?]) {
var transformed: [T] = []
var errors: [NSError?] = []
for result in results {
var error: NSError? = nil
var model: T = MTLManagedObjectAdapter.modelOfClass(modelClass, fromManagedObject: result, error: &error) as T
transformed.append(model)
errors.append(error)
}
return (transformed, errors)
}
}
당신은이 방법처럼 호출 할 수 있습니다 :
이 경우
까지입니다. 저는 제네릭에 대해 완전히 잊어 버렸습니다. – barndog