簡體   English   中英

快速枚舉鏡像獲取關聯值名稱

[英]swift enum mirror get associated value name

我需要獲取枚舉關聯值的名稱。

例如:

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”,我該怎么做? 或使用其他方式(不是鏡像)來獲取字符串“版本”。

不知道這是您要追求的,但是您可以讓您的枚舉實現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)

iOS-(版本:“ 2.30.11”)Android-(版本:“ 2.30.11”,內部版本:101)使用Xcode10(Swift4.2)打印,因此這是舊版本的錯誤。

-@目的

我在Xcode 10-beta 6中測試了此代碼,它打印的是iOS-(版本:“ 2.30.11”)。 這個問題解決了。

謝謝@目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM