我无法在 struct[CGFloat] 处获得 CGFloat
I can't get CGFloat at struct[CGFloat]
大家好,我是一名大学生,制作了一些图表来显示用户的睡眠质量。我从日期选择器中获取日期,并制作了将日期更改为 CGFloat 的功能。但是我不能把 CGFloat 放在结构中。这是我的代码。我要制作更多的睡眠数据作为月份的日期。
Xcode版本是11.2.1,我是通过swiftui申请的
import SwiftUI
struct graph_view: View {
@State var sleepdata : [[CGFloat]] = [
[300,205,105,0,0,105,0,205,105,105,205,105,300],
[300,105,105,0,0,105,0,105,205,205,105,105,205],
[205,105,105,0,105,0,0,0,105,0,205,205,300]
]
func getDate()->String{
let datetextFormatter = DateFormatter()
datetextFormatter.locale = Locale(identifier: "ko_KR")
datetextFormatter.dateFormat = "YYYY년 MM월 dd일"
let stringdate = datetextFormatter.string(from: date)
return stringdate
}
func getDate2()->CGFloat{
let datetextFormatter2 = DateFormatter()
datetextFormatter2.locale = Locale(identifier:"ko_KR")
datetextFormatter2.dateFormat = "dd"
let stringdate2 = datetextFormatter2.string(from: date)
let myFloat = (stringdate2 as NSString).floatValue
return CGFloat(myFloat)
}
@State var date = Date()
var body: some View {
ZStack{
Form {
Section (header: Text("\(getDate()) 그래프")){
VStack {
DatePicker(selection: $date, displayedComponents: .date, label: { Text("날짜 선택") })
}
}
}
VStack{
VStack{
HStack(){
VStack(alignment: .trailing){ Text("waken").font(.system(size: 10)).offset(y:-125)
Text("light sleep").font(.system(size: 10)).offset(y:-45)
Text("deep sleep").font(.system(size: 10)).offset(y:45)
Text("REM").font(.system(size: 10)).offset(y:125)
}
Group{
Bargraph(value: sleepdata[(getDate2())][0])
Spacer()
Bargraph(value: sleepdata[0][1])
Spacer()
Bargraph(value: sleepdata[0][2])
Spacer()
Bargraph(value: sleepdata[0][3])
Spacer()
Bargraph(value: sleepdata[0][4])
Spacer()
}
}
}.padding(.horizontal,10)
.animation(.default)
HStack(){
Text("수면").font(.system(size: 10)).offset(x:35)
Spacer()
Text("기상").font(.system(size: 10))
}.padding(.horizontal,5)
}
}
}
}
struct Bargraph: View{
var value : CGFloat
var body: some View{
VStack{
ZStack(alignment: .bottom){
Capsule().frame(width : 10, height: 300).foregroundColor(Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)))
Capsule().frame(width : 10, height: value).foregroundColor(Color(#colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1)))
}
}
}
}
struct graph_view_Previews: PreviewProvider {
static var previews: some View {
graph_view()
}
}
这里我得到错误消息
Bargraph(value: sleepdata[(getDate2())][0])
Spacer()
无法使用 'CGFloat'
类型的参数为类型“[[CGFloat]]”的值添加下标
我只是想知道为什么我不能在 struct even form 上使用 CGFloat 是正确的。我想知道如何修复它或如何让它发挥作用。感谢阅读初学者的问题。如果您能提出解决方案,我将不胜感激。
您必须传入一个 Int 作为下标,因为这是必需的语法。
像这样..
sleepdata[0][Int(getDate2())]
但我认为真正的问题是你的 sleepdata 数据结构。我认为你应该将它声明为 CGFloats 数组,如果这是你想要的,而不是 CGFloats 数组的数组。虽然不可否认,我不知道数据的含义,也不知道你是如何使用它的。
尽管如此,取自 Int(getDate2())
的下标将导致任何返回值大于 12 的 "Index out of range" 错误。
编辑
我没注意到你把 0 作为内标,所以更正后的形式是:
sleepdata[Int(getDate2())][0]
由于您的数据只有 3 个子数组,任何大于 2 的下标都会产生类似的错误。
所以在条形图调用的上下文中,它应该适用于:
Bargraph( value: sleepdata [Int(getDate2())] [0] )
添加了空格以明确我们访问二维数组的方式。
大家好,我是一名大学生,制作了一些图表来显示用户的睡眠质量。我从日期选择器中获取日期,并制作了将日期更改为 CGFloat 的功能。但是我不能把 CGFloat 放在结构中。这是我的代码。我要制作更多的睡眠数据作为月份的日期。
Xcode版本是11.2.1,我是通过swiftui申请的
import SwiftUI
struct graph_view: View {
@State var sleepdata : [[CGFloat]] = [
[300,205,105,0,0,105,0,205,105,105,205,105,300],
[300,105,105,0,0,105,0,105,205,205,105,105,205],
[205,105,105,0,105,0,0,0,105,0,205,205,300]
]
func getDate()->String{
let datetextFormatter = DateFormatter()
datetextFormatter.locale = Locale(identifier: "ko_KR")
datetextFormatter.dateFormat = "YYYY년 MM월 dd일"
let stringdate = datetextFormatter.string(from: date)
return stringdate
}
func getDate2()->CGFloat{
let datetextFormatter2 = DateFormatter()
datetextFormatter2.locale = Locale(identifier:"ko_KR")
datetextFormatter2.dateFormat = "dd"
let stringdate2 = datetextFormatter2.string(from: date)
let myFloat = (stringdate2 as NSString).floatValue
return CGFloat(myFloat)
}
@State var date = Date()
var body: some View {
ZStack{
Form {
Section (header: Text("\(getDate()) 그래프")){
VStack {
DatePicker(selection: $date, displayedComponents: .date, label: { Text("날짜 선택") })
}
}
}
VStack{
VStack{
HStack(){
VStack(alignment: .trailing){ Text("waken").font(.system(size: 10)).offset(y:-125)
Text("light sleep").font(.system(size: 10)).offset(y:-45)
Text("deep sleep").font(.system(size: 10)).offset(y:45)
Text("REM").font(.system(size: 10)).offset(y:125)
}
Group{
Bargraph(value: sleepdata[(getDate2())][0])
Spacer()
Bargraph(value: sleepdata[0][1])
Spacer()
Bargraph(value: sleepdata[0][2])
Spacer()
Bargraph(value: sleepdata[0][3])
Spacer()
Bargraph(value: sleepdata[0][4])
Spacer()
}
}
}.padding(.horizontal,10)
.animation(.default)
HStack(){
Text("수면").font(.system(size: 10)).offset(x:35)
Spacer()
Text("기상").font(.system(size: 10))
}.padding(.horizontal,5)
}
}
}
}
struct Bargraph: View{
var value : CGFloat
var body: some View{
VStack{
ZStack(alignment: .bottom){
Capsule().frame(width : 10, height: 300).foregroundColor(Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)))
Capsule().frame(width : 10, height: value).foregroundColor(Color(#colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1)))
}
}
}
}
struct graph_view_Previews: PreviewProvider {
static var previews: some View {
graph_view()
}
}
这里我得到错误消息
Bargraph(value: sleepdata[(getDate2())][0])
Spacer()
无法使用 'CGFloat'
类型的参数为类型“[[CGFloat]]”的值添加下标我只是想知道为什么我不能在 struct even form 上使用 CGFloat 是正确的。我想知道如何修复它或如何让它发挥作用。感谢阅读初学者的问题。如果您能提出解决方案,我将不胜感激。
您必须传入一个 Int 作为下标,因为这是必需的语法。
像这样..
sleepdata[0][Int(getDate2())]
但我认为真正的问题是你的 sleepdata 数据结构。我认为你应该将它声明为 CGFloats 数组,如果这是你想要的,而不是 CGFloats 数组的数组。虽然不可否认,我不知道数据的含义,也不知道你是如何使用它的。
尽管如此,取自 Int(getDate2())
的下标将导致任何返回值大于 12 的 "Index out of range" 错误。
编辑
我没注意到你把 0 作为内标,所以更正后的形式是:
sleepdata[Int(getDate2())][0]
由于您的数据只有 3 个子数组,任何大于 2 的下标都会产生类似的错误。
所以在条形图调用的上下文中,它应该适用于:
Bargraph( value: sleepdata [Int(getDate2())] [0] )
添加了空格以明确我们访问二维数组的方式。