无法将类型 'String' 的值转换为预期的参数类型 'Data'
Cannot convert value of type 'String' to expected argument type 'Data'
我当然希望得到一些帮助。我正在使用 Swift 5.1。
我正在尝试获取当前日期 (date4) 并将其格式化为三个字母的月份缩写。没问题,那部分工作正常。然后我定义了一个名为 (currentMonthDate) 的常量,它保存三个字母月份和字符串 "MoonData" 的串联。结果如下所示: "FebMoonData" - 到目前为止,所有工作都按设计进行。
我的Json是按月分开的。下面显示的是 Json 两个月的缩略示例。显然,我的模型旨在适应 Json 结构 - 不包括在内。现在的问题。如果您查看 JSONDecoder 代码行,您会注意到我试图在解码器代码行中使用连接字符串 "currentMonthDate"。我的想法是,随着每个新月份的到来,data4 将发生变化,而 currentMonthDate 将反映该变化,然后将找到反映该特定月份的 JSON 数据块。我收到的错误是:无法将类型 'String' 的值转换为预期的参数类型 'Data'
为了清楚起见,如果我在解码器行中简单地键入 FebMoonData(Json 块的名称),它会按预期工作。也就是说,它找到名为 FebMoonData 的 Json 数组。谢谢!
// JSON
let FebMoonData = """
[
{"time":"20 Feb 2020 00:00 UT"}
]
""".data(using: .utf8)!
let MarMoonData =
[
{"time":"20 Feb 2020 00:00 UT"}
]
""".data(using: .utf8)!
// End JSON
let date4 = Date()
let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "MMM"
let currentMonthDate = dateFormatterGet.string(from: date4) + "MoonData"
let moonphase = try! JSONDecoder().decode([MoonPhase].self, from: currentMonthDate)
decode
的from
参数必须是Data
,不是String
,这是报错信息。无论如何,作为 JSON 数据的文字日期字符串毫无意义。不可能在运行时组合变量名。
你能做的是
let month = Calendar.current.component(.month, from: Date())
let data : Data
switch month {
case 1: data = Data(JanMoonData.utf8)
case 2: data = Data(FebMoonData.utf8)
// ...
}
let moonphase = try! JSONDecoder().decode([MoonPhase].self, from: data)
或
let month = Calendar.current.component(.month, from: Date())
let moonJSON : String
switch month {
case 1: moonJSON = JanMoonData
case 2: moonJSON = FebMoonData
// ...
}
let moonphase = try! JSONDecoder().decode([MoonPhase].self, from: Data(moonJSON.utf8)
或
let moonJSONArray = [JanMoonData, FebMoonData, MarMoonData, ..., DecMoonData]
let month = Calendar.current.component(.month, from: Date())
let moonJSON = moonJSONArray[month - 1]
let moonphase = try! JSONDecoder().decode([MoonPhase].self, from: Data(moonJSON.utf8)
我当然希望得到一些帮助。我正在使用 Swift 5.1。 我正在尝试获取当前日期 (date4) 并将其格式化为三个字母的月份缩写。没问题,那部分工作正常。然后我定义了一个名为 (currentMonthDate) 的常量,它保存三个字母月份和字符串 "MoonData" 的串联。结果如下所示: "FebMoonData" - 到目前为止,所有工作都按设计进行。
我的Json是按月分开的。下面显示的是 Json 两个月的缩略示例。显然,我的模型旨在适应 Json 结构 - 不包括在内。现在的问题。如果您查看 JSONDecoder 代码行,您会注意到我试图在解码器代码行中使用连接字符串 "currentMonthDate"。我的想法是,随着每个新月份的到来,data4 将发生变化,而 currentMonthDate 将反映该变化,然后将找到反映该特定月份的 JSON 数据块。我收到的错误是:无法将类型 'String' 的值转换为预期的参数类型 'Data' 为了清楚起见,如果我在解码器行中简单地键入 FebMoonData(Json 块的名称),它会按预期工作。也就是说,它找到名为 FebMoonData 的 Json 数组。谢谢!
// JSON
let FebMoonData = """
[
{"time":"20 Feb 2020 00:00 UT"}
]
""".data(using: .utf8)!
let MarMoonData =
[
{"time":"20 Feb 2020 00:00 UT"}
]
""".data(using: .utf8)!
// End JSON
let date4 = Date()
let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "MMM"
let currentMonthDate = dateFormatterGet.string(from: date4) + "MoonData"
let moonphase = try! JSONDecoder().decode([MoonPhase].self, from: currentMonthDate)
decode
的from
参数必须是Data
,不是String
,这是报错信息。无论如何,作为 JSON 数据的文字日期字符串毫无意义。不可能在运行时组合变量名。
你能做的是
let month = Calendar.current.component(.month, from: Date())
let data : Data
switch month {
case 1: data = Data(JanMoonData.utf8)
case 2: data = Data(FebMoonData.utf8)
// ...
}
let moonphase = try! JSONDecoder().decode([MoonPhase].self, from: data)
或
let month = Calendar.current.component(.month, from: Date())
let moonJSON : String
switch month {
case 1: moonJSON = JanMoonData
case 2: moonJSON = FebMoonData
// ...
}
let moonphase = try! JSONDecoder().decode([MoonPhase].self, from: Data(moonJSON.utf8)
或
let moonJSONArray = [JanMoonData, FebMoonData, MarMoonData, ..., DecMoonData]
let month = Calendar.current.component(.month, from: Date())
let moonJSON = moonJSONArray[month - 1]
let moonphase = try! JSONDecoder().decode([MoonPhase].self, from: Data(moonJSON.utf8)