Swift 中 Int() 和 :Int 的区别
Difference between Int() and :Int in Swift
我是 Swift 的新手,我对以下内容感到困惑:
在Int(something)
和var x :Int = something
行中,Int()
和:Int
有什么区别?
其实var x = Int(something)
和var x : Int = something
是完全一样的
与 Objective-C 不同,其中 int
是标量类型 Int
Swift 是一个结构,
必须初始化结构。
前一种语法是显式调用初始化器,后者是通过赋值隐式调用
从纯语言的角度来看,为整数(或其他数值类型)变量赋值的正确方法是:
let num = Int(16)
或其任何变体。
但是 Swift 实现了一些语法糖来减少冗长 - 有了它,您可以将上面的语句重写为:
let num = 16
相当于:
let num: Int = 16
(感谢类型推断)
这是可能的,因为 Int
类型实现了 IntegerLiteralConvertible
协议,通过这样做,编译器能够将整数文字转换为初始化程序调用。
还有其他几个类似的协议,用于字符串、数组、浮点数等。
如果你想了解更多,我建议阅读 NSHipster 上的 Swift Literal Convertibles。
如果您想知道自己是否可以做到这一点 classes/structs,答案是肯定的 - 您只需实施与您要使用的文字类型相对应的协议。
我是 Swift 的新手,我对以下内容感到困惑:
在Int(something)
和var x :Int = something
行中,Int()
和:Int
有什么区别?
其实var x = Int(something)
和var x : Int = something
是完全一样的
与 Objective-C 不同,其中 int
是标量类型 Int
Swift 是一个结构,
必须初始化结构。
前一种语法是显式调用初始化器,后者是通过赋值隐式调用
从纯语言的角度来看,为整数(或其他数值类型)变量赋值的正确方法是:
let num = Int(16)
或其任何变体。
但是 Swift 实现了一些语法糖来减少冗长 - 有了它,您可以将上面的语句重写为:
let num = 16
相当于:
let num: Int = 16
(感谢类型推断)
这是可能的,因为 Int
类型实现了 IntegerLiteralConvertible
协议,通过这样做,编译器能够将整数文字转换为初始化程序调用。
还有其他几个类似的协议,用于字符串、数组、浮点数等。
如果你想了解更多,我建议阅读 NSHipster 上的 Swift Literal Convertibles。
如果您想知道自己是否可以做到这一点 classes/structs,答案是肯定的 - 您只需实施与您要使用的文字类型相对应的协议。