Swift 2.0에서 유형 정보를 분석하려고하는데 정적 구조에 저장하려고합니다.하지만 멈 춥니 다. 가장 유망한 접근법은 인스턴스에 대한 미러를 만드는 것입니다.이 미러는 기본 init을 가정하고 필요에 따라 한 번 수행되며 미러 요소의 subjectType을 봅니다.Swift 2.0 유형 분석을위한 리플렉션
내 질문은 :
- 방법 선택 유형 (예를 들어
Optional<String>
를) 풀다 수 있습니다. 유형으로String
부분을 갖고 싶습니다. - 일반 배열 유형을 결정하는 방법 (예 :
Array<Foo>
.
.. 문자열이 바보이고 아마 불가능 배열에 관한
다른 질문을 구문 분석 : A는 요소 유형이있는 경우, 내가 어떻게 새 인스턴스를 만들 수 있습니까?
더 명확하게 말하십시오. 타입 매퍼 (Object mappers, json mappers, widget mappers 등)와 같은 상위 레벨 알고리즘의 유형 정보가 필요합니다. 관련 객체의 유형에 대한 정보가 필요합니다. 유형이 안전하거나 필요한 경우 적절한 변환을 삽입해야합니다.
예외를 발생시키지 않아야하는 Int?
속성에 매핑해야하는 속성 인 Int
을 생각해보십시오.
코드는 지금까지 필요한 모든 정보를 저장해야합니다 PropertyDescriptor
년대의 배열을 포함하는 BeanDescriptor
클래스를 채우고
뭔가 같은 :
class PropertyDescriptor {
// instance data
var bean: BeanDescriptor;
var name: String;
var type: Any.Type;
var optional = false
// more data for arrays, e.g. elementType...
...
}
코드는 지금까지 클래스를 분석하는 것입니다 :
// create a default instance
let instance = create(); // we need a NSObject though! darn...
let mirror = Mirror(reflecting: instance)
if let displayStyle = mirror.displayStyle {
if displayStyle == .Class {
for case let (label?, value) in mirror.children {
let property = analyzeProperty(label, value: value)
properties[property.name] = property;
} // for
}
}
및 호출 된 함수
func analyzeProperty(name : String, value: Any) -> PropertyDescriptor {
let mirror : Mirror = Mirror(reflecting: value)
var type = mirror.subjectType
var optional = false
// no way..this sucks!
if (type == String?.self) {
type = String.self // uhhhh
optional = true
}
else if ... // lots other literal types, ...
return PropertyDescriptor(bean: self, name: name, type: type, optional: optional)
}
그러나 이것은 다른 선택적 클래스 Money?
뿐만 아니라 배열에 관한 다른 정보를 포함하지 않습니다. 내가 어레이 형 검출 것이며 예컨대 일반 배열 유형을 결정하는 방법 요소 유형
을 당신이 원하는 것을 이해하는 데 어려움을 겪습니다. 코드를 게시 할 수 있다고 생각하십니까? 당신이 가지고있는 것을 보여주는 것, 당신이 원하는 것, 그리고 당신이 생각하고있는 것을 보여주는 의사 코드. – solidcell
님이 질문을 편집했습니다 :-) –