0
golang構造タグのような属性タグについて何かを検索しようとしていますが、私は何も見つけ出しませんでした。Swift 3属性タグ
Golang構造体:
struct {
microsec uint64 "field 1"
serverIP6 uint64 "field 2"
process string "field 3"
}
golang構造タグのような属性タグについて何かを検索しようとしていますが、私は何も見つけ出しませんでした。Swift 3属性タグ
Golang構造体:
struct {
microsec uint64 "field 1"
serverIP6 uint64 "field 2"
process string "field 3"
}
スウィフトで容易に入手可能ではそのような属性タグはありません。スウィフトで利用可能な宣言と型の属性に関する詳細については、を参照してください。私たちは、実行時のイントロスペクションに焦点を当てた場合
、しかし、あなたはあなたのタイプのプロパティ名を印刷するMirror
structureを使用することができ、次のように:
struct Foo {
let microsec: UInt64 //"field 1"
let serverIP6: UInt64 // "field 2"
let process: String // "field 3"
init(_ microsec: UInt64, _ serverIP6: UInt64, _ process: String) {
self.microsec = microsec
self.serverIP6 = serverIP6
self.process = process
}
}
let foo = Foo(100, 999, "foo")
Mirror(reflecting: foo).children.forEach { print($0.0 ?? "no field name") }
/* microsec
serverIP6
process */
あなたが言及属性タグの単一の目的はMirror
を使用して、実行時のイントロスペクションである場合は、独自のカスタムを実装することができる0123お使いのタイプのは、CustomReflectable
protocolに準拠しており、イントロスペクションの目的に適しています。このカスタム実装では、デフォルトのプロパティ名を自分のフィールドに置き換えることができます。例:
struct Foo {
let microsec: UInt64 //"field 1"
let serverIP6: UInt64 // "field 2"
let process: String // "field 3"
init(_ microsec: UInt64, _ serverIP6: UInt64, _ process: String) {
self.microsec = microsec
self.serverIP6 = serverIP6
self.process = process
}
}
extension Foo : CustomReflectable {
var customMirror: Mirror {
return Mirror(self, children: [
"field 1" : "\(microsec)",
"field 2" : "\(serverIP6)",
"field 3" : process
])
}
}
let foo = Foo(100, 999, "foo")
Mirror(reflecting: foo).children
.forEach { print($0.0 ?? "no field name", $0.1) }
/* field 1 100
field 2 999
field 3 foo */
ありがとうございました、dfri。 – eduardo
@eduardo喜んで助けてください! – dfri