2016-05-18 16 views
0

は仮定します構造体の変数名を迅速に取得する方法は?

struct A{ var a:String; var b:Int } 

は、どのように私は、ループまたは構造体A内の変数名を取得するには、いくつかの他の方法のために作ることができますか?

+0

https://developer.apple.com/library/watchos/documentation /Swift/Reference/Swift_Mirror_Structure/index.html – jtbandes

+3

あなたはリフレクションを使用する必要があります。しかし、あなたがこれを行う必要があると思うなら、もう一度考えてみてください。 – matt

答えて

5

Mirrorは、Swiftでのリフレクション用のクラスです(実際は構造体です)。以下は、あなたの構造体のプロパティを列挙する非常に簡単な例です。

let a = A(a: "abc", b: 1) 
let mirror = Mirror(reflecting: a) 
for child in mirror.children { 
    print(child.label!) 
    print(child.value) 
} 

、出力は次のようになります。

a 
abc 
b 
1 

は読む価値がありますスウィフトリフレクションAPIの記事が見つかりました:https://appventure.me/2015/10/24/swift-reflection-api-what-you-can-do/

+0

ミラーは、プレイグラウンドとデバッグにのみ推奨されます。それは残念なことに生産で使用されるとメモリをリークします。 – aBikis

+1

@aBikis「ミラーは遊び場とデバッガで使用されています」と書かれていますが、必ずしもプロダクションで使用できないというわけではありません。個人的には、軽い使用のために反射が目立つほど遅くなるのではないかと疑います。 –

+0

私もそれを考えました!しかし、実際には3.5 Xの速度が遅くなります! [link](https://appventure.me/2015/10/24/swift-reflection-api-what-you-can-do/)これは大きな問題ではありませんが、実際にはかなりの数のメモリが作成されています上記のコードとほぼ同じコードを使用しながらもリークします。 Appleによって文書化されていないが、多くのStructsに準拠するためのプロトコルとして使用されたときに、それは私のアプリを戦うことになった。 – aBikis

関連する問題