自定义数据类型 — 类(swift)
下面简单的介绍结构体这一自定义数据类型的应用
类的基本语法
类是引用类型
引用类型的特点
类的等价
什么时候使用类,什么时候使用结构体
一:类的基本语法
class Person {
var firstName: String
var lastName: String
init(firstName: String, lastName: String){
self.firstName = firstName
self.lastName = lastName
}
init?(fullName: String){
guard let index = fullName.rangeOfString(" ")?.startIndex
else{
return nil
}
let a = fullName.substringToIndex(index)//如果这句话要放在guard保护里,必须是optional类型
let b = fullName.substringFromIndex(index)
self.firstName = a
self.lastName = b
}
func fullName() -> String {
return self.firstName + self.lastName
}
}
let person = Person(firstName: "尹", lastName: "欢一")
let person1 = Person(fullName: "Steve Jobs")
person.firstName
person.lastName
person1!.firstName
person1!.lastName
person1?.fullName()
person.fullName()
二:类是引用类型
类的传递是通过Preference Type 传递的
三:引用类型的特点
结构体和枚举如果要调用函数自身改变自身的话,必须在函数前面写mutating关键字
struct Person {
var age = 10
var day = 20
mutating func setAge(){
return self.age += 20
}
}
var person = Person( )
person.setAge()
person.age
enum Location {
case on
case off
mutating func change() {
switch self {
case on:
self = .off
case off:
self = .on
}
}
}
var door = Location.off
door.change()
door.change()
四:类的等价
//如果要判断两个类对象是否相等,那么应该使用的是“===”,三个等号
//如果要判断两个类对象是否不等,那么应该使用的是“!==”,一个叹号和两个等号
//如果一个类被赋值了两次,那么系统就会为第三个变量开辟一块新的存储空间,这时候第一个类和第三个类就不相等了
五:什么时候使用类,什么时候使用结构体
如果你想要封装的是一个位置,坐标,温度等,考虑使用结构体
如果你想要封装的是一个人,车,动物等,考虑使用类
如果一个事物需要继承其他的类或被其他的类继承,那么就使用类
如果一个事物非常小,那么使用结构体,结构体是保存在栈中,而类保存在堆中