Làm thế nào để bạn khởi tạo một kiểu động dựa trên giá trị tra cứu trong từ điển trong Swift?Tạo đối tượng Swift từ một từ điển
5
A
Trả lời
4
Hy vọng điều này hữu ích cho người khác. Phải mất một số nghiên cứu để tìm ra điều này. Mục đích là để tránh các mô hình của các câu lệnh if hoặc switch khổng lồ để tạo ra từng loại đối tượng từ một giá trị.
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())"
khía cạnh thú vị:
- sử dụng "cần thiết" cho initializers
- sử dụng .Type để có được những loại cho giá trị từ điển.
- sử dụng .self để nhận "lớp" có thể được tạo ra
- sử dụng() để khởi tạo đối tượng động.
- sử dụng Giao thức có thể in để nhận các giá trị chuỗi ngầm định.
- cách bắt đầu sử dụng init không được tham số hóa và nhận các giá trị từ khởi tạo lớp con.
cập nhật để Swift 3,0 cú pháp
Các vấn đề liên quan
- 1. Tạo một từ điển từ đối tượng groupby, Python
- 2. Tạo một lớp con Từ điển Swift?
- 3. Tạo đối tượng từ điển hằng số
- 4. Cách chuyển đổi đối tượng Swift thành từ điển
- 5. Map mảng các đối tượng vào từ điển trong Swift
- 6. Tạo một mảng trong Swift từ một đối tượng NSData
- 7. Swift: lọc từ điển
- 8. Tạo đối tượng động từ điển với C# Reflection
- 9. Khởi tạo các dãy từ điển trống trong Swift
- 10. lặp qua một từ điển trong Swift
- 11. Từ điển NSMutable thêm các đối tượng
- 12. Lặp qua đối tượng từ điển
- 13. Chuyển đổi Swift từ điển để NSDictionary
- 14. Sử dụng một đối tượng làm khóa Từ điển chung
- 15. Swift: flatMap vào từ điển
- 16. Swift: Flatten một loạt các từ điển để một từ điển
- 17. Swift: Lấy Số Khóa Trong Từ điển
- 18. Truyền AnyObject sang từ điển trong swift
- 19. Python - tạo từ điển từ danh sách các từ điển
- 20. Từ điển Swift [String: String] tới NSMutableDictionary?
- 21. Tạo đối tượng từ foreach
- 22. Tạo Swift đối tượng NSError
- 23. Tạo đối tượng từ chuỗi
- 24. tạo xml từ đối tượng
- 25. Phím từ điển chữ thường trong Swift
- 26. đối tượng là các khóa trong từ điển python
- 27. Swift NSUserDefault không lưu từ điển?
- 28. C# đối tượng ẩn danh có thuộc tính từ điển
- 29. Bộ nhớ giao dịch từ từ điển C# chứa trong một đối tượng tĩnh
- 30. Sắp xếp một mảng của bộ từ điển trong Swift
Đáng tiếc là bây giờ bạn đã chỉnh sửa câu hỏi trong số tất cả công nhận. Nó không còn rõ ràng những gì các câu hỏi được hoặc những gì đây là giải pháp cho. Nó sẽ là tốt hơn để trở lại câu hỏi ban đầu và đặt câu trả lời như là một câu trả lời, không phải là một chỉnh sửa của câu hỏi mà ghi đè câu hỏi ban đầu. – matt
Vâng, không còn là một câu hỏi nữa. Tôi đã làm cho nó thành một câu hỏi bây giờ, là tốt hơn? Hay tôi nên quay lại? – possen
Về cơ bản bạn không thể làm điều đó chút nào trong Swift. Tuy nhiên bạn có thể làm điều đó trong Objective-C và Swift hoàn toàn có khả năng tương tác với các đối tượng Objective-C. Lưu ý rằng bất cứ thứ gì subclassing NSObject không phải là một đối tượng nhanh, nó là một đối tượng Objective-C. Chúng hoạt động chủ yếu giống nhau, nhưng Objective-C có thể năng động, nhưng có những hạn chế khác (ví dụ: chúng chậm hơn nhiều). –