常用数据类型

Swift快速入门数据类型(3) - 图1
我们定义一个Int类型的age变量,查看Int的定义,发现在Swift中,Int竟然是Struct类型。
和Kotlin类似,在Kotlin中一切都是对象。
而Swift中,没有基本类型,常用Int、String 等都是通过Struct来定义的。
这样的好处是,我们可以直接在Int类型上进行扩展,如,Xcode中我们输入一个数字,默认会提示有很多属性和方法:
Swift快速入门数据类型(3) - 图2
当然,由于Int是Struct类型,我们可以自定义扩展,为其添加实例属性或方法:
extension Int {
//获得该整数的字符串
var toString : String{
return String(self)
}
func add(_ num:Int)->Int{
return self + num
}
}
print(100.toString)
//100
print(100.add(100))
//200


值类型与引用类型

Swift supports two kinds of types: value types and reference types. Structs and enums are value types, while classes and functions are reference types.
Swift 中支持两种类型: 值类型和引用类型( value types and reference types)。
Swift快速入门数据类型(3) - 图3


值类型

即: 每个实例都拥有其数据的一份副本
值类型的赋值相当于Javascript中的深拷贝(Deep Copy)。
每个变量都是独立的,不必担心另一个变量会改变它。如下图:
Swift快速入门数据类型(3) - 图4
struct Color {
var name:String = “black”
}

var color = Color()
var anthorColor = color
anthorColor.name = “blue”

print(color.name) // black
print(anthorColor.name) //blue


引用类型

即:所有实例共享一个数据副本。
修改其中一个实例的属性,会同步修改其源数据的属性。
因为所有实例的引用指向的内存空间是一样的。如下图:
Swift快速入门数据类型(3) - 图5
// 定义一个油漆桶类,颜色是black
class Bucket {
var color:String=”black”
}
var bucket = Bucket()
// 引用传值
var azurePaint = bucket
// 改变属性值为蓝色
azurePaint.color = “blue”
// 最终,油漆桶的颜色变为: blue
print(bucket.color)


常用类型举例

以下列举常量数据类型的声明和简单使用,具体的后续还会详细介绍:
// 整型
// 有符号整形 Int,Int8,Int16,Int32,Int16
// 无符号整形: UInt,UInt8,UInt16,UInt32,UInt16
// 一般使用Int类型即可
// 在32位平台上, Int 的长度和 Int32 相同。
// 在64位平台上, Int 的长度和 Int64 相同。
var intNum = 100

// 浮点数
// 浮点数是有小数的数字,比如 3.14159 , 0.1 , 和 -273.15 。
// Double代表 64 位的浮点数。
// Float 代表 32 位的浮点数。
var dnum: Double = 12.5
var fnum: Float = 12.5

// 字符串类型,Swift 类型推断为String类型
let someString = “Some string literal value”
// 显示指定String类型
let anotherString = “Another string literal value”

// 布尔值Bool
// Swift为布尔量 Bool 提供了两个常量值, true 和 false 。
let orangesAreOrange:Bool = true
let turnipsAreDelicious:Bool = false
if turnipsAreDelicious {
print(“Mmm, tasty turnips!”)
} else {
print(“Eww, turnips are horrible.”)
}
// 输出:Eww, turnips are horrible.
// 和JavaScript语言不同,Swift 的类型安全机制会阻止你用一个非布尔量的值替换掉 Bool。
/*
let i = 1
// 编译期即会报错
if i {

}
*/

// 元组Tuple
// 元组把多个值合并成单一的复合型的值。元组内的值可以是任何类型,而且可以不必是同一类型。
let http404Error = (404, “Not Found”)
print(“the status code is (http404Error.0)”)
//the status code is 404
print(“the reason is (http404Error.1)”)
//the reason is Not Found
let (statusCode, statusMessage) = http404Error
print(“ths status code is (statusCode)”)
//ths status code is 404
let http200Status = (statusCode: 200, description:”OK”)
print(“The status code is (http200Status.statusCode)”)
//The status code is 200