私も、私は以下の例を作ったこれを行う方法の関心を持っているので。構造体をシングルトンにする静的インスタンス変数に加えて、静的でないプロパティを持つ構造体を作成するだけではどうでしょうか。次のコードサンプルでは、Person
オブジェクトの値をJSON辞書にマッピングするための使用例を、REST APIの命名規則を使用して詳しく説明します。 PersonJSONKeys
のプロパティ名はPerson
のプロパティ名と一致する必要があります。
allProperties()
のコードは、How to loop over struct properties in Swift?です。この関数を簡単に変更すると、構造体プロパティの値のみを返すことができます。
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]
}
構造体は、現在、シングルトンであるので、そのプロパティの全ては一度だけ初期化され、スレッドの安全性は、その静的インスタンス変数によって与えられます。
私はこれを試していませんが、構造体の_instance_またはメタタイプをミラーリングしていますか?私は 'Tree.type'をミラーリングする必要がある静的なプロパティを取得すると思います。 –
.typeが何を意味するのかよく分かりません。私の構造体にはそのプロパティはありませんが、自分自身で試してみました。何も得られませんでした。 – mattgabor
申し訳ありませんが、「Tree.self」と言っていたはずです(私は大文字T型を考えていましたが、これはメタタイプオブジェクトではなく型名です)。 –