我需要获取与枚举关联的值的名称。
例如:
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的关联值名称“版本”,该怎么办?或使用其他方式(非镜像)获取字符串“版本”。
答案 0 :(得分: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)
答案 1 :(得分:0)
iOS-(版本:“ 2.30.11”)android-(版本:“ 2.30.11”,内部版本:101)获取 用Xcode10(Swift4.2)打印,所以它是旧版本的错误。
-@目的
我在Xcode 10-beta 6中测试了此代码,它打印iOS-(版本:“ 2.30.11”)。 这个问题解决了。
感谢@目的。