- 类(Class) 是一种类型或模板,描述了对象的特征和行为。
- 对象(Object) 是类的实例,实际的实体,拥有自己的数据。
新入门的教学都喜欢用“人”来举例为类,在这里我也用“人”吧
//"人“这个类
class person {let type = "person"var name : String?var age : Int?func setName(name : String) -> String {self.name = namereturn "成功设置名字为\(name)"}func eat() {print("吃饭行为")}func sleep() {print("睡觉行为")}
}//对象(实例)
//人的实例就具体一个人嘛,就let,总不能你还能设置为别人对吧
let you : person = person()
//名字设置为帅哥
you.setName(name: "帅哥")
这里使用person()来实例化,但是如果需要自定义呢,比如初始化的时候需要传点参数对吧,这时候就需要构造函数。
//"人“这个类
class person {let type = "person"var name : Stringvar age : Int//参数的默认值就是帅哥、18init(name: String, age: Int) {self.name = nameself.age = age}func setName(name : String) -> String {self.name = namereturn "成功设置名字为\(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 : Stringvar age : Intvar tall : CGFloat?//参数的默认值就是帅哥、18init(name: String, age: Int, tall: CGFloat? = 180.0) {self.name = nameself.age = ageself.tall = tall}func setName(name : String) -> String {self.name = namereturn "成功设置名字为\(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 : Stringinit(sideLength: Double, name: String) {self.sideLength = sideLengthself.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