gpt4 book ai didi

swift - 如果值为 `rawValue`,如何从 `Any` 中提取 `RawRepresentable`

转载 作者:行者123 更新时间:2023-11-28 07:29:15 24 4
gpt4 key购买 nike

我正在寻找类似的东西:

func extractRawValue(fromPossibleRawRepresentable value: Any) -> Any? {
return (value as? RawRepresentable)?.rawValue
}

我不介意提取的 RawValue 是否需要是静态类型...

func extractRawValue<T: RawRepresentable, U>(fromPossibleRawRepresentable value: Any, expecting: U.Type) -> U? where T.RawValue == U {
return (value as? T)?.rawValue
}

上下文:我想在镜像中收集原始值而不是实际值。

let d = Mirror(reflecting: self).children.reduce(into: [String: String](), {
guard let label = $1.label else {
return
}
$0[label] = extractRawValue(fromPossibleRawRepresentable: $1.value)
}

最佳答案

问题是 RawRepresentable有一个 associatedtype , 所以你不能分配 Any给它。您也不能将它用作泛型类型,因为这样您就必须在函数签名中使用具体类型本身,这违背了目的。

您可以使用以下方法很容易地规避这些问题:

protocol RawString {
var rawValue: String { get }
}

这将允许您使用以下方法提取值:

func extractRawValue(value: Any) -> String? {
return (value as? RawString)?.rawValue
}

对于要从中提取 rawValue 的任何类型作为String , 只需添加符合 RawString 的内容即可,例如

enum Foo: String, RawString {}

// or

struct StringContainer: RawString {
var rawValue: String
}

这种方法的缺点是您需要明确标记每种类型以符合 RawString ,但不幸的是我看不到任何其他方式。

关于swift - 如果值为 `rawValue`,如何从 `Any` 中提取 `RawRepresentable`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55476630/

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