初探Swift八 - 类
初探Swift,Swift类,Swift类的实例化,Swift类的操作等是本文的内容。这是一门强类型、完全面相对象的语言。类可以更好的封装、抽象、复用模块和代码,使得代码更加的优雅简洁。
/**
* 类
*/
//定义一个类
class TV{
//定义属性
var price = 1999
var name = "乐TV"
//定义方法
func open()->String{
return "Success"
}
func close()->Bool{
return true
}
}
//创建对象,不需要new这个关键字的
var myTV = TV()
//调用类的属性
println(myTV.name)
//调用类的方法
myTV.open()
myTV.close()
//类的对象是值调用还是引用调用。
var myTV2 = myTV
//改变myTV2的价格
myTV2.price = 2000
//打印myTV2的价格,是2000,修改成功
myTV2.price
//打印myTV1的价格,是2000,说明是引用传递的
myTV.price
//可以用“===”来判断使用来自同一个类
myTV === myTV2
//swift是没有指针概念的:因为虽然引用传递用的还是指针,但是swift并没有给我们指针的语法
/**
* 类的构造函数、析构函数
*/
class People{
var name:String = "小明"
}
var peopleObj = People()
//结果是小明
peopleObj.name
//增加析构函数后
class People2{
var name:String = "小明"
//析构函数,系统特殊函数,不需要加func
init(name:String){
self.name = name
}
//析构函数,系统特殊函数,不需要加func和()
deinit {
name = ""
}
}
var peopleObj2 = People2(name: "小红")
peopleObj2.name
/**
* 类的继承
*/
//学生类继承人类类
class Student : People{}
var studentObj = Student()
studentObj.name
class Student2 : People2{
override init(name:String){
//父类的构造函数需要手动调用,不会自动执行
super.init(name: "小红")
super.name = "hello: \(super.name)"
self.name = name
}
//重写父类的函数需要加关键词override
//重写属性
override var name:String{
get{
return super.name
}
set{
super.name = "hi \(name)"
}
}
//不希望被重写,再父类的方法前面加@final。可以加在方法、属性、设置类前面
}
var studentObj2 = Student2(name: "小白")
println(studentObj2.name)
studentObj2.name = "lane"
println(studentObj2.name)