Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 我能';t在struct[CGFloat]上获取CGFloat_Swift_Xcode_Struct_Swiftui_Cgfloat - Fatal编程技术网

Swift 我能';t在struct[CGFloat]上获取CGFloat

Swift 我能';t在struct[CGFloat]上获取CGFloat,swift,xcode,struct,swiftui,cgfloat,Swift,Xcode,Struct,Swiftui,Cgfloat,嗨,我是一名大学生,我制作了一些图表来显示用户睡眠情况如何。我从日期选择器中获取日期,并使用函数将日期更改为CGFloat。但是我不能把CGFloat放在struct中。这是我的密码。我将制作更多的睡眠数据作为月数 Xcode版本是11.2.1,我是由swiftui开发的应用程序 import SwiftUI struct graph_view: View { @State var sleepdata : [[CGFloat]] = [ [300,205,105,0,0,105,0,

嗨,我是一名大学生,我制作了一些图表来显示用户睡眠情况如何。我从日期选择器中获取日期,并使用函数将日期更改为CGFloat。但是我不能把CGFloat放在struct中。这是我的密码。我将制作更多的睡眠数据作为月数

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中使用CGFloat,即使是form也是正确的。我想知道如何修复它或者如何使它工作。感谢阅读初学者的问题。如果您能想出一个解决方案,我将不胜感激。

您必须输入一个Int作为下标,因为这是必需的语法

像这样的

sleepdata[0][Int(getDate2())]
但我认为真正的问题是你的数据结构。我认为如果你想要的话,你应该把它声明为一个CGfloat数组,而不是一个CGfloat数组。虽然我承认,我不知道这些数据意味着什么,也不知道你是如何使用它的

尽管如此,从
Int(getDate2())
获取的下标将导致任何返回的大于12的值出现“索引超出范围”错误

编辑

我没有注意到您将0作为内部下标,因此更正后的形式为:

sleepdata[Int(getDate2())][0]
由于您的数据只有3个子数组,任何高于2的下标都会产生类似的错误

因此,在条形图调用的上下文中,它应该与以下内容一起使用:

Bargraph( value: sleepdata [Int(getDate2())] [0] )

添加了空格,以明确我们是如何访问2D阵列的。

哦,哇,这真是一个简单的错误!我从来没有想过把Int放进去!谢谢你的帮助:)当然,没问题!错误消息本身有点误导,因为它似乎没有明确指出问题在于将CGFloat直接作为下标传递。