gpt4 book ai didi

ios - Swift:如何访问枚举的变量元素?

转载 作者:行者123 更新时间:2023-11-28 12:05:59 35 4
gpt4 key购买 nike

几个小时以来,我一直在努力获取枚举的可变元素。

Swifticons” - pod 为我提供了以下枚举:

public enum WeatherType: Int {
static var count: Int {
return weatherIcons.count
}

public var text: String? {
return weatherIcons[rawValue]
}

case alien, barometer, celsius, owm300, owm301, owm302, and200moreOfTheseNames
}

private let weatherIcons = ["\u{f075}", "\u{f079}", and202moreOfTheseFontCharacters]

从外部 API ( openWeatherMap.org ) 我只得到一个天气代码(比如说“300”)- 我想访问图标“owm300”。

但是我如何在不知道 rawValue(比如 - 198)的情况下访问枚举的这个元素?

最佳答案

计划如下:

  1. 我们需要枚举所有枚举案例。我们将通过迭代原始值来做到这一点(幸运的是,WeatherTypeInt 支持)。
  2. 我们将存储将 String 映射到 WeatherType 的惰性初始化字典。
  3. 最后,我们声明一个返回可选 WeatherType? 的静态函数,因为我们可能会遇到未知值。

代码如下:

extension WeatherType {
// just some little convenience
private typealias W = WeatherType

// 1. define the sequence of all cases
private static func allCases() -> AnySequence<W> {
return AnySequence { () -> AnyIterator<W> in
var raw = 0
return AnyIterator {
// Iterates while raw value can be converted to an enum case
if let next = W(rawValue: raw) {
raw += 1
return next
}
return nil
}
}
}

// 2. Static properties are lazy so we'll use them to store the dictionary with String to WeatherType mapping
private static let typeMap = W.allCases().reduce([String: W]()) { acc, next in
var acc = acc
acc[String(describing: next)] = next
return acc
}

// 3. Declare the mapping function
static func from(string: String) -> WeatherType? {
return W.typeMap[string]
}
}

这里有一个小测试:

let str = "301"
let type = WeatherType.from(string: "owm\(str)")
print(type == .owm301)

关于ios - Swift:如何访问枚举的变量元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49370973/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com