swift enum mirror获取关联的值名称

问题描述 投票:1回答:2

我需要获取枚举关联值的名称。

例如:

enum App{
    case iOS(version:String)
    case android(version:String, build:Int)
}
let iosApp = App.iOS(version:"2.30.11")
let androidApp = App.android(version:"2.30.11",build:101)
let iosMirror = Mirror(reflecting: iosApp)
for case let (key?, value) in iosMirror.children {
        print("\(key)-\(value)") //this will print:iOS-2.30.11,missing the value name-"version",the string "version" was I need.
}
let androidMirror = Mirror(reflecting: androidApp)
for case let (key?, value) in androidMirror.children {
        print("\(key)-\(value)") //this will print:android-(version:"2.30.11",build:101)
}

问题:我想从iosMirror获取iosApp的关联值名称“version”,我该怎么办?或使用其他方式(不是镜像)来获取字符串“版本”。

swift enums mirror associated-value
2个回答
0
投票

不确定这是否是你所追求的,但你可以让你的枚举实现CustomStringConvertible来获得特定的输出。

enum App : CustomStringConvertible {
    var description: String { get {
        switch self {
            case .iOS(version: let v):
                return "version: \(v)"
            case .android(version: let v, build: let b):
                return "version: \(v) build: \(b)"
            }
        }
    }

    case iOS(version: String)
    case android(version:String, build:Int)
}

let iosApp = App.iOS(version:"2.30.11")
let androidApp = App.android(version:"2.30.11",build:101)

print(iosApp)
print(androidApp)

0
投票

iOS-(版本:“2.30.11”)android-(版本:“2.30.11”,版本:101)使用Xcode 10(Swift 4.2)进行打印,因此它是旧版本的错误。

-@目的

我在Xcode 10-beta 6中测试了这段代码,它打印iOS-(版本:“2.30.11”)。这个问题解决了。

谢谢@Purpose。

© www.soinside.com 2019 - 2024. All rights reserved.