【问题标题】:Swift struct property accessSwift 结构属性访问
【发布时间】:2020-03-15 11:51:46
【问题描述】:

你能告诉我为什么我不能用结构属性替换幻数吗? self.buttonSize 不起作用

struct ContentView: View {
    @State var buttonSize = 80

    var body: some View {


        VStack {
            Button(action: {
            }) {

                Text("Hello world")
                    .frame(width: self.buttonSize, height: 80)
            }
        }
    }

}

谢谢

【问题讨论】:

  • 什么不行,是不是报错了?

标签: swift struct swiftui


【解决方案1】:

您只需将buttonSize 声明为CGFloat,因为这是width 的预期类型。

@State var buttonSize: CGFloat = 80

【讨论】:

  • 为什么有时需要定义数据类型,有时不需要?
  • @user2641891 Swift 使用类型推断,因此编译器将始终尝试推断变量的类型。如果编译器由于某些歧义而无法自行执行此操作,或者当您使用数字文字时,如果您想更改推断类型,则必须对变量进行类型注释。编译器将所有整数文字推断为Int,因此var buttonSize = 80 的类型将是Int,没有类型注释。但是,如果您键入 annotate buttonSize as CGFloat,它将是 CGFloat 类型,因为编译器可以简单地将 Int 传递给 CGFloat 初始化程序
  • 感谢您的帮助,您认为最好的做法是键入提示吗?
  • @user2641891 没有。让编译器完成它的工作,不要在代码中使用不必要的类型注释来制造不必要的噪音。仅在必要时使用类型注释。
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 2014-09-11
  • 2021-04-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多