【问题标题】:difference between two types of variable declarations? [duplicate]两种类型的变量声明之间的区别? [复制]
【发布时间】:2020-10-13 03:11:32
【问题描述】:

我怀疑应该在哪里使用此声明: var name: String = 'Name' 和 var name: String = {return 'Name'}

我在我工作的一些代码中看到了这一点,我想知道这些语句之间的区别

【问题讨论】:

标签: swift


【解决方案1】:

TLDR:一个是函数,一个是String

var name: String = "Name" 是“常规”变量赋值。您创建一个字符串类型的var,标识符为name,并为其分配值“名称”。

var name: String = {return "Name"} 不会编译。您正在创建一个 String 类型的 var,但不是为它分配一个字符串,而是为它分配一个函数。花括号表示一个函数。

所以...

var name = "Name"
print(name)
  1. 使用值名称创建变量name。
  2. 打印变量名的值[预期输出Name]

而

var name = {return "Name"}
print(name)
  1. 创建一个变量name,其值为{return "Name"}
  2. 将其打印到控制台 [预期输出 (Function)]

然而

var name = {return "Name"}
print(name())
  1. 创建一个变量name,其值为{return "Name"}
  2. 评估该函数并打印结果 [预期输出Name]

因此

var sum = {return 1+2}
print(sum())
  1. 创建一个变量sum,其值为{return 1+2}
  2. 评估该函数并打印结果 [预期输出 3]

最后一点 - 您使用了单引号 ('),但您应该使用双引号 (") 声明字符串。

【讨论】:

    【解决方案2】:

    第一个是存储属性。 第二个是计算属性。

    这里的区别是,计算属性的 { } 中的代码是每次访问它时都会执行的。它没有内存来自己存储值。

    例如,如果你的 viewController 有一个属性:

    var label: UILabel { return UILabel() }
    
    // Then you use it as
    
    label.text = "hello"   // label 1
    label.textColor = .red // another label, label 2
    
    // the label 1 and label 2 are different, it's initialized each time use access it.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2017-10-05
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多