Xcode 11 的问题 - “INT 不能转换为 CGFloat?”

Posted

技术标签:

【中文标题】Xcode 11 的问题 - “INT 不能转换为 CGFloat?”【英文标题】:Issues with Xcode 11 - "INT is not convertible to CGFloat?" 【发布时间】:2019-11-01 05:56:21 【问题描述】:

请在下面查看我的代码。我已经尝试了一些东西,但似乎没有任何帮助。我注意到的一件事是,如果我注释掉第 28 行,代码可以正常工作,但如果我保持第 28 行不变,我会不断收到错误消息。

我试过改成:

HStack(alignment:.center, spacing: CGFloat(50))                                        

但这也没有奏效。请帮忙 提前感谢您抽出宝贵时间对此进行调查。

//
//  ContentView.swift
//  UdemyCourse
//
//  Created by Karan Singh on 10/29/19.
//  Copyright © 2019 Karan Singh. All rights reserved.
//

import SwiftUI

struct ContentView: View 

    @State var text: String = ""

    var body: some View 
        VStack
            HStack(alignment:.center, spacing: CGFloat(50)) 
                Image("Karan").resizable().frame(width: 100, height: 120, alignment: .center)

            VStack
                Text(verbatim: "Karan Singh").font(.title).foregroundColor(.black).bold()
                Text(verbatim: "Customer Success")
            
        

            Divider()

            TextField($text, placeholder: Text(verbatim: "Enter Text"))

            ButtonView(title: "Login", clickAction: 
                print("Click to Login")
)

//struct ContentView_Previews: PreviewProvider 
//    static var previews: some View 
//        ContentView()
//    
//
          
    

【问题讨论】:

【参考方案1】:

您应该注意 Xcode 会在错误的地方抱怨错误,因此您得到的错误可能与实际错误无关。


查看您的代码似乎有几个错误。除非您为 TextFieldButtonView 编写了自己的组件(如果您这样做了,则应该将其包含在代码示例中),否则错误似乎与它们有关。

首先是TextField,它以最简单的形式采用以下参数:

TextField(<title: StringProtocol>, text: Binding<String>)

这与您所写的不同(我也找不到与您提供的重载匹配的TextField)。所以你应该将你的TextField 更新为:

TextField("Enter text", text: $text)

其次,没有名为ButtonView 的组件,所以我假设您打算使用Button。它的参数是:

Button(action: () -> Void, label: () -> _)

所以你应该将你的Button 更新为:

Button(action: 
    print("Click to login")
) 
    Text(verbatim: "Login")

如果我们把它们放在一起(将图像换成一个名为 image 的系统,因为我没有你的照片),我们会得到以下内容,编译时不会出错:

struct ContentView: View 

    @State var text: String = ""

    var body: some View 
        VStack 
            HStack(alignment: VerticalAlignment.center, spacing: 50) 
                Image(systemName: "person.fill")
                    .resizable()
                    .frame(width: 100, height: 100, alignment: .center)

                VStack 
                    Text(verbatim: "Karan Singh")
                        .font(.title)
                        .foregroundColor(.black)
                        .bold()
                    Text(verbatim: "Customer Success")
                

                Divider()

                TextField("Enter text", text: $text)


                Button(action: 
                    print("Click to login")
                ) 
                    Text(verbatim: "Login")
                

            
        
    



struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    

注意:ContentView_Previews 应该在您的 ContentView 结构之外。

【讨论】:

以上是关于Xcode 11 的问题 - “INT 不能转换为 CGFloat?”的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 转换获取 'Int1' 不能转换为 'Bool'

short与int

2021-11-17 xcode12.3 &xcode13.1 下lipo合并framework问题

Xcode 11.1 错误:产生多个命令

Xcode 11 卡在存档上

Xcode 11.4 导航栏按钮问题