2016-11-22 2 views
1

Есть ли что-то похожее на отражение java в swift или мне нужно всегда сопоставлять атрибуты один за другим, как следующий код?Атрибуты отображения Swift Reflection

class User: Model { 

var name: String 

override init(data: Dictionary<String, AnyObject>){ 
    super.init(data: data) 
    self.name = data["name"] as? String 
    if let vouchers_count = data["vouchers_count"] as? Int { 
     self.vouchers_count = vouchers_count 
    } 
} 

ответ

1

Вы можете использовать библиотеки, такие как EVReflection.

import EVReflection 

class User: EVObject { 
    var name: String = "" 
    var vouchers_count: Int = 0 
} 

let alice = User(json: "{\"name\":\"alice\",\"vouchers_count\":1}") 
debugPrint(alice) 
/* 
    testUser = { 
    "name" : "alice", 
    "vouchers_count" : 1 
    } 
*/ 

let bob = User(json: "{\"name\":\"bob\"}") 
debugPrint(bob) 
/* 
    testUser = { 
    "name" : "bob", 
    "vouchers_count" : 0 
    } 
*/ 
0

Swift 3 в настоящее время только имеет довольно базовые возможности отражения с помощью зеркала - как описано here.

В вашем случае вы будете использовать его как:

let user = User() 
user.name = "Michael" 
let mirror = Mirror(reflecting: user) 
print(mirror) 
for case let (label?, value) in mirror.children { 
    print ("\(label) \(subjectType) = \(value)) 
    // ... Prints name String = Michael 
} 

Хорошая статья может быть найдена here.

Смежные вопросы