swift 如何创建一个快速的WeatherKit UVIndex用于测试?

svmlkihl  于 2023-10-15  发布在  Swift
关注(0)|答案(1)|浏览(107)

我想创建WeatherKit UVIndex结构的示例。
这是Apple源代码中的定义(摘录):

public struct UVIndex {
    public var value: Int
    public var category: UVIndex.ExposureCategory

    // ...
}
extension UVIndex : Codable {
    // ...

    public init(from decoder: Decoder) throws
}

现在,对于我的SwiftUI预览,我想创建一个UVIndex的虚拟示例。我试过:

let uvIndex = UVIndex(value: 2, category: UVIndex.ExposureCategory(rawValue: "low"))

然而,它拒绝以这种方式初始化,错误消息说:
call中位置#1、#2处的额外参数
主要问题:

如何获取UVIndex示例进行测试?

次要问题:

Apple是如何隐藏默认的结构初始化程序的?

jmo0nnb3

jmo0nnb31#

UVIndex没有带有属性参数的公共初始化器。WeatherKit中很可能使用了一个私有初始化器。Apple并不打算让任何人通过传递属性值来创建UVIndex的示例。
由于UVIndex支持Codable,您可以通过WeatherKit获取UVIndex的示例,并使用JSONEncoder对示例进行编码,然后查看生成的JSON。
使用该JSON作为引用,您可以使用所需的值创建自己的JSON字符串。然后用你的JSON创建一个JSONDecoder,并使用UVIndexinit(from:)来创建你自己的示例。
目前,编码UVIndex的JSON格式为:

{
    "category": "low",
    "value": 0
}

当然,“category”值可以是UVIndex.ExposureCategory值之一。
“value”属性可能是一个0到11范围内的整数。

相关问题