我肯定会感谢您的帮助。我正在使用Swift 5.1。 我正在尝试获取当前日期(date4)并将其格式化为三个字母月份的缩写。没问题的那部分工作正常。然后,我定义一个名为(currentMonthDate)的常量,该常量包含三个字母月份和字符串“ MoonData”的串联。结果如下所示:“ FebMoonData”-到目前为止,所有工作均按设计进行。
我的Json按月分隔。下面显示的是一个价值两个月的Json的简短示例。显然,我的模型旨在适应Json结构-不包括在内。现在的问题。如果查看JSONDecoder代码行,您会注意到我正在尝试在解码器代码行中使用串联字符串“ currentMonthDate”。我的想法是,随着每个新月的到来,data4将发生变化,currentMonthDate将反映该变化,然后将找到反映该特定月份的JSON数据块。我收到的错误是:无法将类型为“字符串”的值转换为预期的参数类型为“数据” 为了清楚起见,如果我仅在解码器行中键入FebMoonData(2月的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)
答案 0 :(得分:0)
from
的{{1}}参数必须为decode
,而不是Data
,这是错误消息。无论如何,文字日期字符串作为JSON数据毫无意义。在运行时编写变量名是不可能的。
您可以做的是
String
或
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)