- 类(Class) 是一种类型或模板,描述了对象的特征和行为。
- 对象(Object) 是类的实例,实际的实体,拥有自己的数据。
新入门的教学都喜欢用“人”来举例为类,在这里我也用“人”吧
//"人“这个类
class person {
let type = "person"
var name : String?
var age : Int?
func setName(name : String) -> String {
self.name = name
return "成功设置名字为\(name)"
}
func eat() {
print("吃饭行为")
}
func sleep() {
print("睡觉行为")
}
}
//对象(实例)
//人的实例就具体一个人嘛,就let,总不能你还能设置为别人对吧
let you : person = person()
//名字设置为帅哥
you.setName(name: "帅哥")
这里使用person()来实例化,但是如果需要自定义呢,比如初始化的时候需要传点参数对吧,这时候就需要构造函数。
//"人“这个类
class person {
let type = "person"
var name : String
var age : Int
//参数的默认值就是帅哥、18
init(name: String, age: Int) {
self.name = name
self.age = age
}
func setName(name : String) -> String {
self.name = name
return "成功设置名字为\(name)"
}
func eat() {
print("吃饭行为")
}
func sleep() {
print("睡觉行为")
}
}
//对象
let you : person = person(name: "帅哥", age: 18)
print("你是\(you.name),年龄\(you.age)")
//输出:你是帅哥,年龄18
如果需要某个属性初始化就自带默认值的话,以身高tall为例,人均180。示例如下:
//"人“这个类
class person {
let type = "person"
var name : String
var age : Int
var tall : CGFloat?
//参数的默认值就是帅哥、18
init(name: String, age: Int, tall: CGFloat? = 180.0) {
self.name = name
self.age = age
self.tall = tall
}
func setName(name : String) -> String {
self.name = name
return "成功设置名字为\(name)"
}
func eat() {
print("吃饭行为")
}
func sleep() {
print("睡觉行为")
}
}
//对象
let you : person = person(name: "帅哥", age: 18)
print("你是\(you.name),年龄\(you.age)," + "身高\(you.tall ?? 0.0)")
//输出:你是帅哥,年龄18,身高180.0
但是有些人行为是不一样的,通过实现person的子类来定义这些不一样的人。
class SpecialMan: person {
override func eat() {
print("顿顿帝王蟹")
}
override func sleep() {
print("打坐不睡觉")
}
}
let you = SpecialMan()
you.eat()
//打印"顿顿帝王蟹"
子类如果要重写父类的方法的话,需要用 override
标记——如果没有添加 override
就重写父类方法的话编译器会报错。编译器同样会检测 override
标记的方法是否确实在父类中。
同时对应类中的属性getter,setter方法也要会自定义。使用 getter 和 setter 的计算属性。示例:
class SquareShape {
var sideLength: Double = 0.0 //边长
var name : String
init(sideLength: Double, name: String) {
self.sideLength = sideLength
self.name = name
}
//周长的get和set的方法
var perimeter: Double {
get {
return 4.0 * sideLength
}
set {
sideLength = newValue / 4.0
}
}
}
//初始化边长为8的正方形
var square = SquareShape(sideLength: 8, name: "正方形")
print(square.perimeter)//打印32
//周长设置为16
square.perimeter = 16
print(square.sideLength)//打印4