我是Swift新手,需要帮助,我应该在应用程序中使用json输出数据。如果date = date,则应在同一日期输出。
import SwiftUI结构ContentView:视图{
var salatTimes: [SalatTime] = []
//timer
static let taskDateFormat: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .medium
//formatter.timeStyle = .medium
return formatter
}()
var dueDate = Date()
//datum vergleich
@State private var salatT = taskDateFormat
//ende Timer
var body: some View {
NavigationView {
VStack {
Text("Datum: \(dueDate, formatter: Self.taskDateFormat)")
List(salatTimes) { item in
Image(item.imageName)
.colorInvert()
Text(item.nameSalat)
Spacer()
Text(item.timeSalat)
.padding()
}.padding()
}
}.navigationViewStyle(StackNavigationViewStyle())
}}
结构ContentView_Previews: PreviewProvider {静态变量预览:一些视图{ ContentView(salatTimes: SalatApp) }}
/*
struct SalatTime: Identifiable, Decodable {
var id = UUID()
var nameSalat: String
var timeSalat: String
var imageName: String { return nameSalat }}
/*/ json data
{
"times": [
{
"date": "2020-01-02",
"fajr": "4:58 AM",
"sunrise": "6:19 AM",
"dhuhr": "11:37 AM",
"asr": "2:35 PM",
"maghrib": "4:55 PM",
"isha": "6:25 PM"
},
{
"date": "2020-02-02",
"fajr": "4:59 AM",
"sunrise": "6:17 AM",
"dhuhr": "11:47 AM",
"asr": "2:56 PM",
"maghrib": "5:18 PM",
"isha": "6:48 PM"
},
{
"date": "2020-03-02",
"fajr": "4:41 AM",
"sunrise": "5:57 AM",
"dhuhr": "11:46 AM",
"asr": "3:07 PM",
"maghrib": "5:36 PM",
"isha": "7:06 PM"
},
{
"date": "2020-04-02",
"fajr": "4:08 AM",
"sunrise": "5:25 AM",
"dhuhr": "11:38 AM",
"asr": "3:07 PM",
"maghrib": "5:51 PM",
"isha": "7:21 PM"
},
{
"date": "2020-05-02",
"fajr": "3:36 AM",
"sunrise": "4:58 AM",
"dhuhr": "11:31 AM",
"asr": "3:00 PM",
"maghrib": "6:05 PM",
"isha": "7:35 PM"
},
{
"date": "2020-06-02",
"fajr": "3:15 AM",
"sunrise": "4:43 AM",
"dhuhr": "11:32 AM",
"asr": "2:56 PM",
"maghrib": "6:20 PM",
"isha": "7:50 PM"
},
{
"date": "2020-07-02",
"fajr": "3:18 AM",
"sunrise": "4:47 AM",
"dhuhr": "11:38 AM",
"asr": "3:01 PM",
"maghrib": "6:28 PM",
"isha": "7:58 PM"
},
{
"date": "2020-08-02",
"fajr": "3:37 AM",
"sunrise": "5:01 AM",
"dhuhr": "11:40 AM",
"asr": "3:07 PM",
"maghrib": "6:19 PM",
"isha": "7:49 PM"
},
{
"date": "2020-09-02",
"fajr": "3:56 AM",
"sunrise": "5:15 AM",
"dhuhr": "11:34 AM",
"asr": "3:03 PM",
"maghrib": "5:53 PM",
"isha": "7:23 PM"
},
{
"date": "2020-10-02",
"fajr": "4:10 AM",
"sunrise": "5:26 AM",
"dhuhr": "11:23 AM",
"asr": "2:47 PM",
"maghrib": "5:20 PM",
"isha": "6:50 PM"
},
{
"date": "2020-11-02",
"fajr": "4:24 AM",
"sunrise": "5:42 AM",
"dhuhr": "11:17 AM",
"asr": "2:29 PM",
"maghrib": "4:53 PM",
"isha": "6:23 PM"
},
{
"date": "2020-12-02",
"fajr": "4:42 AM",
"sunrise": "6:03 AM",
"dhuhr": "11:23 AM",
"asr": "2:23 PM",
"maghrib": "4:43 PM",
"isha": "6:13 PM"
},
{
"date": "2020-13-02",
"fajr": "4:58 AM",
"sunrise": "6:19 AM",
"dhuhr": "11:37 AM",
"asr": "2:35 PM",
"maghrib": "4:55 PM",
"isha": "6:25 PM"
},
{
"date": "2020-14-02",
"fajr": "4:58 AM",
"sunrise": "6:19 AM",
"dhuhr": "11:37 AM",
"asr": "2:35 PM",
"maghrib": "4:55 PM",
"isha": "6:25 PM"
},
{
"date": "2020-15-02",
"fajr": "4:58 AM",
"sunrise": "6:19 AM",
"dhuhr": "11:37 AM",
"asr": "2:35 PM",
"maghrib": "4:55 PM",
"isha": "6:25 PM"
},
{
"date": "2020-16-02",
"fajr": "4:58 AM",
"sunrise": "6:19 AM",
"dhuhr": "11:37 AM",
"asr": "2:35 PM",
"maghrib": "4:55 PM",
"isha": "6:25 PM"
},
{
"date": "2020-17-02",
"fajr": "4:58 AM",
"sunrise": "6:19 AM",
"dhuhr": "11:37 AM",
"asr": "2:35 PM",
"maghrib": "4:55 PM",
"isha": "6:25 PM"
},
{
"date": "2020-18-02",
"fajr": "4:58 AM",
"sunrise": "6:19 AM",
"dhuhr": "11:37 AM",
"asr": "2:35 PM",
"maghrib": "4:55 PM",
"isha": "6:25 PM"
},
{
"date": "2020-19-02",
"fajr": "4:58 AM",
"sunrise": "6:19 AM",
"dhuhr": "11:37 AM",
"asr": "2:35 PM",
"maghrib": "4:55 PM",
"isha": "6:25 PM"
},
]}
请帮帮忙
谢谢
发布于 2020-02-10 16:50:59
你开始的方式是错误的。
当您真正的问题是解析JSON文档中的文本并将其正确地解释为日期时,您正试图直接转到display。
您要做的第一件事是创建一个模型对象,它表示JSON数据中的一个数组元素,重要的是以最适合您的应用程序的方式。与在JSON文档中找到的方式不同。然后编写使用JSON数据的一个数组元素初始化模型对象的代码。
一旦这是工作,并彻底测试,然后您可以开始与您的UI。日期转换函数应该是模型对象的一部分。
为了获得额外的积分,问问你自己,你的代码在摩尔曼斯克的夏天是否可以工作。摩尔曼斯克在北极圈以北一点。例如,这意味着日落可以在凌晨0:05。
发布于 2020-06-09 18:18:40
大家好,我在一些朋友的帮助下找到了以下解决方案。我在这里发布了我的代码,希望我能用这个解决方案来帮助别人。第一部分:
extension Formatter {
static let month: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "MM"
return formatter
}()
static let day: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "dd"
return formatter
}()
static let amPM: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "a"
return formatter
}()
}
extension Date {
var month: String { return Formatter.month.string(from: self) }
var day: String { return Formatter.day.string(from: self) }
var amPM: String { return Formatter.amPM.string(from: self) }
}第二部分:
import SwiftUI
struct ContentView: View {
let prayTimes = Bundle.main.decode("time.json")
var body: some View {
GeometryReader { geometry in
ZStack {
Image("background")
.resizable()
.aspectRatio(geometry.size, contentMode: .fill)
.edgesIgnoringSafeArea(.all)
ZStack{
timeView(self.prayTimes).padding()
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct ourView: View {
var item: PrayTime
var body: some View {
VStack{
HStack{
Text("Fajr").font(.body)
Spacer()
Text("\(item.fajr)")
Image(systemName: "speaker").padding()
}.padding()
HStack{
Text("Sunrise").font(.body)
Spacer()
Text(item.sunrise)
Image(systemName: "circle").padding()
}.padding()
HStack{
Text("Dhuhr").font(.body)
Spacer()
Text(item.dhuhr)
Image(systemName: "speaker").padding()
}.padding()
HStack{
Text("Asr").font(.body)
Spacer()
Text(item.asr)
Image(systemName: "speaker").padding()
}.padding()
HStack{
Text("Maghrib").font(.body)
Spacer()
Text(item.maghrib)
Image(systemName: "speaker").padding()
}.padding()
HStack{
Text("Isha").font(.body)
Spacer()
Text(item.isha)
Image(systemName: "speaker").padding()
}.padding()
}.foregroundColor(Color.white).background(Rectangle().opacity(0.5))
}
}
struct Countries: Decodable {
let name: String
let capital: String
}
func timeView(_ items: [PrayTime]) -> AnyView {
let date = Date()
let day = date.day + "-" + date.month
for item in items{
if (item.id == day) {
return(AnyView(ourView(item: item)))
}
}
return AnyView(Text("Nothing Found. Please update to resolve."))
}https://stackoverflow.com/questions/60146474
复制相似问题