Ben de aşağıdaki örneğe yapılan Bunun nasıl bir ilgi var beri. Neden sadece statik olmayan özelliklere sahip yapıyı ve yapının tekil olmasını sağlayan bir statik örnek değişkeni yaratmıyoruz. Aşağıdaki kod örneği, Person
nesnesinin değerlerini REST API'sının adlandırma semantiği kullanılarak bir JSON sözlüğüne eşlemek için örnek kullanım durumunu gösterir. PersonJSONKeys
mülk isimleri, Person
'un mülkiyet isimleriyle eşleşmelidir.
allProperties()
işlevinin kodu How to loop over struct properties in Swift?'dan gelir. Bu işlevi, yalnızca bir yapı özelliklerinin değerlerini döndürmek için kolayca değiştirebilirsiniz. Struct yana
struct PersonJSONKeys: PropertyLoopable {
static let instance: PersonJSONKeys = PersonJSONKeys()
private init() {}
let name = "name"
let firstName = "first_name"
let age = "age"
}
struct Person: PropertyLoopable {
let name = "Doe"
let firstName = "John"
let age = "18"
}
let person = Person()
let personProperties = person.allProperties()
var personJSON: [String:Any] = [:]
for jsonProperty in PersonJSONKeys.instance.allProperties() {
let propertyName = jsonProperty.key
let jsonKey = jsonProperty.value as! String
personJSON[jsonKey] = personProperties[propertyName]
}
şimdi tüm özellikleri sadece bir kez başlatılacaktır bir tekil ve iplik güvenliği onun statik örnek değişkeni tarafından verilir.
Bunu denemedim, ancak yapının _instance_'ını veya metatype'u mı yansıtıyorsunuz? Tree.type'ı yansıtmak zorunda kalacağım statik özellikler elde etmeyi düşünüyorum. –
.type ile kastettiğinizden emin değilim, yapmamın bu özelliği yok, ama ben de denedim. Kendim ve hiçbir şey almadım. – mattgabor
Üzgünüz, doğru, 'Tree.self' (Ben sermaye-T "Tipini düşünüyordum, ama bu tipameame, metatype nesnesi değil) demeliydim. Çok işe yaramaz. –