Swift에서 사전의 조회 값을 기준으로 유형을 어떻게 동적으로 인스턴스화합니까?사전에서 스위프트 개체 만들기
5
A
답변
4
다른 사람들에게 유용하게 사용되기를 바랍니다. 이것을 알아 내기 위해 연구가 필요했습니다. 목표는 거대한 if 또는 switch 명령문의 안티 패턴을 피하여 값에서 각 오브젝트 유형을 작성하는 것입니다.
class NamedItem : CustomStringConvertible {
let name : String
required init() {
self.name = "Base"
}
init(name : String) {
self.name = name
}
var description : String { // implement Printable
return name
}
}
class File : NamedItem {
required init() {
super.init(name: "File")
}
}
class Folder : NamedItem {
required init() {
super.init(name: "Folder")
}
}
// using self to instantiate.
let y = Folder.self
"\(y.init())"
let z = File.self
"\(z.init())"
// now put it in a dictionary.
enum NamedItemType {
case Folder
case File
}
var typeMap : [NamedItemType : NamedItem.Type] = [.Folder : Folder.self,
.File : File.self]
let p = typeMap[.Folder]
"\(p!.init())"
let q = typeMap[.File]
"\(q!.init())"
흥미로운 측면 : 초기화를위한 "필수"의
- 사용 .Type의
- 사용은 사전 값의 유형을 얻을.
- 인스턴스를 생성 할 수있는 "클래스"를 얻으려면 .self를 사용합니다. 동적 객체를 인스턴스화하는 데()를 사용합니다.
- 암시 적 문자열 값을 얻기 위해 인쇄 가능한 프로토콜을 사용합니다.
- 매개 변수화되지 않은 초기화를 사용하여 초기화하고 하위 클래스 초기화에서 값을 가져 오는 방법
스위프트 3.0 구문
관련 문제
- 1. 스위프트 3 : 사전에서 항목 변경
- 2. 개체 사전에서 개체 가져 오기
- 3. 스위프트 : 개체
- 4. 사전에서 키로 개체 사용
- 5. 사전에서 CLLocation 개체 채우기
- 6. 파이썬 사전에서 NSDictionary 만들기
- 7. 스위프트 선택적 개체 -
- 8. 스위프트 - 전역으로 개체 실행
- 9. 목록의 사전에서 막대 그래프 만들기
- 10. 사전에서 XML 문서 만들기 문제
- 11. 사전에서 특정 크기의 행렬 만들기
- 12. 일반 개체 공장 만들기
- 13. 간단한 설명 개체 스위프트 언어
- 14. 여러 변수 형식으로 개체 만들기
- 15. 만들기 개체
- 16. 스위프트 (Swift) - 객체 배열 만들기
- 17. 스위프트 : UISegmentedView를 편집 불가능하게 만들기
- 18. Http GET에서 스위프트 배열 만들기
- 19. 충돌 스위프트
- 20. 페이지 내용의 사전에서 계층 트리 만들기
- 21. 오브젝트 사전에서 장고 (Django) 양식 만들기
- 22. 개체 재설정과 새 개체 만들기
- 23. 스위프트
- 24. 스위프트 - 개체 삽입/아이템/I이 코드가있는 NSArray
- 25. 스위프트 : 이름
- 26. 다른 개체에서 개체 만들기
- 27. scons에 SConscript 개체 만들기
- 28. 이미지와 클래스에서 개체 만들기
- 29. 개체 목록 만들기
- 30. 알 수없는 개체 만들기
로 업데이트 불행하게도 당신은 지금 모든 인식의 부족 문제를 수정했습니다. 더 이상 질문이 무엇인지 또는 이것이 해결책인지 명확하지 않습니다. 원래 질문을 덮어 쓰는 질문을 편집하는 것이 아니라 원래 질문으로 되돌아 가서 답을 답으로하는 것이 좋습니다. – matt
그래, 정말로 더 이상 질문하지 않습니다. 나는 이제 그 질문에 대답했다. 아니면 내가 돌아 가야 하나? – possen
Swift에서는 본질적으로 그렇게 할 수 없습니다. 그러나 Objective-C에서이를 수행 할 수 있으며 Swift는 Objective-C 객체와 완벽하게 상호 작용할 수 있습니다. NSObject의 하위 클래스는 신속한 객체가 아니라 Objective-C 객체입니다. 그들은 거의 동일하게 행동하지만 Objective-C는 동적 일 수 있지만 다른 단점이 있습니다 (예 : 훨씬 느립니다). –