首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift 3属性标签

Swift 3属性标签
EN

Stack Overflow用户
提问于 2016-11-18 15:42:31
回答 1查看 416关注 0票数 0

我试图搜索一些关于属性标签的东西,比如golang标签,我没有找到任何东西,我们至少有一个选择?

戈朗结构:

代码语言:javascript
运行
复制
struct {
microsec  uint64 "field 1"
serverIP6 uint64 "field 2"
process   string "field 3"
}
EN

Stack Overflow用户

回答已采纳

发布于 2016-11-18 16:24:29

Swift中没有现成的此类属性标记;有关Swift中可用的声明和类型属性的详细信息,请参阅:

但是,如果我们关注运行时内省,可以使用结构打印类型的属性名,如下所示:

代码语言:javascript
运行
复制
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进行运行时内省,那么您可以为您的类型实现您自己的自定义Mirror,方法是遵从协议,适合您的内省目的。在此自定义实现中,可以将默认属性名称替换为自己的字段。例如:

代码语言:javascript
运行
复制
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 */
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40680988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档