我想创建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是如何隐藏默认的结构初始化程序的?
1条答案
按热度按时间jmo0nnb31#
UVIndex
没有带有属性参数的公共初始化器。WeatherKit中很可能使用了一个私有初始化器。Apple并不打算让任何人通过传递属性值来创建UVIndex
的示例。由于
UVIndex
支持Codable
,您可以通过WeatherKit获取UVIndex
的示例,并使用JSONEncoder
对示例进行编码,然后查看生成的JSON。使用该JSON作为引用,您可以使用所需的值创建自己的JSON字符串。然后用你的JSON创建一个
JSONDecoder
,并使用UVIndex
的init(from:)
来创建你自己的示例。目前,编码
UVIndex
的JSON格式为:当然,“category”值可以是
UVIndex.ExposureCategory
值之一。“value”属性可能是一个0到11范围内的整数。