首页 > 解决方案 > SwiftUI 误导性错误:“Int”不可转换为“CGFloat”

问题描述

我一直在第 83 行 .offset(x: 150, y:7) 上得到“Int”不能转换为“CGFloat”。如果我将数字包装在 CGFloat() 中,则相同的错误只会出现在其他地方。我知道这与我程序中的控制流有关,但我无法确定在哪里。请帮忙。

这是我的 DateTracking.swift 屏幕代码(出现错误)。

struct DateTracking: View {

    @State var recipes: [Recipe] = getRecipes()
    @State var filterRecipesBy: String = ""
    @State private var searchTerm: String = ""
    @State var sortedNames: [Item] =  getItemsSortedByNames()
    @State var sortedDays: [Item] =  getItemsSortedByDaysLeft()
    @State var arraySelection: Int = 0
    @State var sortBySelected: Bool = false
    @State var recipesShown: Bool = false
    @State var buttonShown: Bool = true


    var body: some View {

        NavigationView{

            ZStack{


                VStack{

                    SearchBar(text: $searchTerm)



                    if(self.arraySelection == 0){
                        QGrid(sortedDays.filter {
                                    self.searchTerm.isEmpty ? true :
                                        $0.imageName.localizedCaseInsensitiveContains(self.searchTerm)
                                }, columns: 3) { item in


                                    Button(action: {
                                        self.filterRecipesBy = item.imageName
                                        recipesShown.toggle()
                                    }){
                                        ListItem(imageName: item.imageName, daysLeft: item.daysLeft, redBackground: item.redBackground )
                                    }



                                }
                                //.background(Color(red: 239 / 255, green: 239 / 255, blue: 239 / 255))
                            }

                    if(self.arraySelection == 1){
                        QGrid(sortedNames.filter {
                                    self.searchTerm.isEmpty ? true :
                                        $0.imageName.localizedCaseInsensitiveContains(self.searchTerm)
                                }, columns: 3) { item in

                                    ListItem(imageName: item.imageName, daysLeft: item.daysLeft, redBackground: item.redBackground )

                                }
                            //.background(Color(red: 239 / 255, green: 239 / 255, blue: 239 / 255))
                        }

                    }



                if (self.sortBySelected == true){
                    VStack{

                        Button(action: {
                            self.sortBySelected.toggle()
                        }) {
                            Text("Done")

                        }
                        .offset(x: 150, y: 7)

                        Picker(selection: self.$arraySelection, label:
                            Text("Picker Name")){
                            Text("Expiry Date").tag(0)
                            Text("Names").tag(1)

                        }
                        .labelsHidden()


                    }
                    .frame(width:375)
                    .background(Color(red: 239 / 255, green: 239 / 255, blue: 239 / 255))
                    .offset(x: 0, y: 140)


                }

                if (self.recipesShown == true){
                    VStack(alignment: .center, spacing: 15) {

                        HStack {
                            Button(action: {self.recipesShown.toggle()
                            }){
                                Cross()
                            }
                            .offset(x: -70, y: 11)
                            Text(verbatim: "Recipes You Can Cook")
                                .font(.headline)
                                .fontWeight(.bold)
                                .padding(.top)
                                .offset(x: -50, y: 5)
                        }


                        RecipesVertical(recipes: self.recipes.filter($0.ingredients.contains(filterRecipesBy)))
                            .padding(.leading)

                            //.offset(x: 0, y: 140)
                    }
                    .frame(width:375, height:310, alignment: .center)
                    .background(Color.white)

                }

               /* if(buttonShown == true){
                    Button(action: {self.recipesShown = true
                        self.buttonShown = false
                    }){
                        Image("floatingrecipebutton")
                        .resizable()
                            .frame(width: 85, height: 85)
                            .shadow(radius: 10)

                                   }
                                       .offset(x: 125, y:200)
                }
               */





            }
                .navigationBarTitle(Text("Date Tracking"))
                .navigationBarItems(trailing:

                HStack{

                    Button(action: {
                        self.sortBySelected.toggle()
                        }){
                        Text("Sort by")
                    }

                        }


            )


        }

    }

}

标签: iosswiftxcodeswiftui

解决方案


在 Swift 中,你不能在没有明确转换的情况下将 Int 分配给 CGFloat。

在这种情况下,1您可以更改为1.0. 那会奏效的。


推荐阅读