【问题标题】:Difference of using `:` and `as` in Swift when specifying variable type in Swift?在 Swift 中指定变量类型时,在 Swift 中使用 `:` 和 `as` 的区别?
【发布时间】:2015-01-19 04:56:26
【问题描述】:

遵循了一些关于 Swift 的不同教程,并注意到了这种差异。是否存在两条线的功能不同的情况,或者这更像是一种风格偏好?

var newString:NSString = "Test String"

var newString = "Test String" as NSString

【问题讨论】:

  • 你为什么需要它成为一个 NSString 呢?只需说var newString = "Test String" 并停止。
  • @matt NSString 有一些其他的功能作为 swift 字符串。而且由于 swift 不允许隐式类型转换,例如当一个函数只接受 NSStrings 时,你必须自己做。
  • @Simon 不,你没有。嗯,大多数情况下你不知道。在极少数情况下,您不能将 Swift 字符串直接传递给 Cocoa。 Swift 确实 允许隐式类型转换 - 桥接类型。而String-to-NSString是一种桥接类型。
  • 不一定是 NSString,更多的是关于“as”和“:”的问题。另一个更简单的例子: var newInt = 3.0 as Double 或 var newInt:Double = 3.0
  • @Simon 事实上,在他的第一个示例var newString:NSString = "Test String" 中,正是这种隐式类型转换! "TestString" 以 Swift String 开始,但可以直接分配给 NSString 变量,无需强制转换。

标签: variables swift


【解决方案1】:

不同之处在于,在第一种情况下,您将变量声明为 NSString 类型,因此它将是 NSString 类型,并使用字符串字面量进行初始化。 (要么是编译器执行了从 swift String 类型到 NSString 的隐式转换,要么是文字本身是无类型的——我实际上不确定这个。)

在第二种情况下,您没有明确声明变量的类型。相反,您执行从String 文字到NSString 的显式转换,因此初始化表达式本身具有NSString 类型。因此,类型推断会告诉编译器变量的类型也是NSString

这两种情况的总体结果应该是相似的(如果不完全相同,则以实际转化成本为模,如果有的话)。

【讨论】:

    【解决方案2】:

    在这种情况下没有功能差异。它只是在变量声明中显式声明的变量类型与从初始值隐式推断的变量类型之间的区别。无论哪种方式,这个变量都有一个类型,这很重要。

    (但在其他情况下,需要显式声明。)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2016-11-12
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多