<span style="color:#CC0000;">class</span> Animal
{
let age:Int
let color:String
let type:String
init(age:Int,color:String,type:String)
{
self.age = age
self.type = type
self.color = color
}
}
对于上述类的定义我总结几点需要注意的点:
1.对于属性必须给定类型,再声明属性的时候我们可以直接实例化给值也可以通过初始化函数给属性值
总之一句话必须给值,不能像OC那样直接声明不初始化
2.初始化函数无返回值
所以可以写成这样:
class Animal {
let age:Int = 2
let color:String = String()
let type:String = ""
}
结构体
struct GeoLocation {
var latitude:Double
var longitude:Double
let distance:Double
}
发现没有他们之间在定义方面的区别点
1.结构体不需要初始化,直接声明即可
2.类必须要初始化属性,才算定义完成
再来看一下的区别:
显而易见,这是针对他们本身的类型来说,当方法赋值操作的时候,结构体是值类型,类是引用类型
所以区别就是点:
值类型赋值后会真的拷贝
引用类型赋值后都是同一个对象
再来看最后一个区别点:
注意到了吗?
当我们把结构体的实例对象声明为常量后,无法再次修改常量结构体实例对象的任何属性值(不管属性是常量还是变量) 注意是再次初始化给得值不算不管你是默认给值还是通过初始化函数给值都不算,因为都是第一次,而且初始化的时候必须要让属性都有值,这是必须的不然报错
当我们把结构体的实例对象声明为变量的话,我们还是可以修改结构体里面的变量属性的值得
总之要根据两点确定能不能修改,首先外面的结构体是常量还是变量,第二里面的属性是常量还是变量,只有两者都是变量的时候才能修改,否则都无法修改
针对类的话,明确一点:
只要类里面的属性不是常量,就可以修改属性值,不管你的类实例是常量还是变量