//类
//属性定义(get,set方法)、便利构造器方法、方法定义
class Person {
var firstName =""
var lastName =""
var age =0
var fullName:String{//属性的get、set方法
get{
returnfirstName+" "+lastName
}
set{
let array =fullName.components(separatedBy:" ")
if array.count >=2 {
firstName = array.first!
lastName =fullName.substring(from: (firstName+" ").endIndex)
}else{
firstName =""
lastName =fullName
}
}
}
lazyvar account =Account()//懒加载类(类的属性必须为var)
init(firstName:String,lastName:String,age:Int) {//指定便利构造器方法(-(instancetype)initWithFirst:(NSString *)firstName...)
self.firstName = firstName
self.lastName = lastName
self.age = age
}
convenienceinit(fullName:String) {//便利构造方法
let array = fullName.components(separatedBy:" ")
if array.count >=2 {
let first = array.first!
let last = fullName.substring(from: (first+" ").endIndex)
self.init(firstName:first,lastName:last,age:0)
}else{
self.init(firstName:"",lastName:fullName,age:0)
}
}
func modifyInfoWithAge(firstName:String,lastName:String,age:Int) {//实例方法
self.firstName = firstName
self.lastName = lastName
self.age = age
}
staticvar skin:Array<String> {//类属性
return ["yellow","white","blace"]
}
func showMessage() {//实例方法
print("MyName is\(fullName),firstName is\(firstName),lastName is\(lastName),age is\(age).")
}
classfunc showClassName(){//类方法
print("ClassName is \"\(self)\"")
}
deinit {//析构方法(无法直接调用)
print("deinit...")
}
}
//类里面属性的值改变是监听
class Account {
var balance:Double =0.0{
willSet{
self.balance =2.0
print("Account.balance willSet,newValue=\(newValue),value=\(self.balance)")
}
didSet{
self.balance =3.0
print("Account.balance didSet,oldValue=\(oldValue),value=\(self.balance)")
}
}
}
//创建类
var p =Person.init(firstName:"Jonny", lastName: "Deng", age:25)
p.account.balance =10 //属性设置
p.showMessage( )//实例方法调用
for colorinPerson.skin { //类属性调用
print(color)
}
p = Person.init(fullName:"Jenny Yang")
p.age =18
p.showMessage()
p.modifyInfoWithAge(firstName:"Jonny", lastName:"Deng", age:25)
p.showMessage()
Person.showClassName() //类方法调用
//类の下标索引
class Record {
var store:[String:String]
init(data:[String:String]) {
self.store = data;
}
subscript(index:Int)->String{
get{
let key =self.store.keys.sorted()[index]
returnself.store[key]!
}
set{
let key =self.store.keys.sorted()[index]
self.store[key] = newValue
}
}
subscript(key:String)->String{
get{
returnstore[key]!
}
set{
store[key] = newValue
}
}
}
let r =Record.init(data: ["name":"Jenny","sex":"gril"])
print("r[0]=\(r[0])")//结果:r[0]=Jenny
r["sex"] ="boy"
print(r[1])//结果boy
//类の继承
class Student: Person {//Student类继承Person类
overridevar firstName:String{ // 重写属性监听
willSet{
print("oldValue=\(firstName)")
}
didSet{
print("newValue=\(firstName)")
}
}
var score:Double
//子类构造 初始化之后调用父类的构造方法
init(firstName:String,lastName:String,score:Double) {
self.score = score
super.init(firstName: firstName, lastName: lastName, age:0)
}
convenienceinit() {
self.init(firstName:"",lastName:"",score:0)
}
//重写父类的方法
overridefunc showMessage() {
print("MyName is\(fullName),firstName is\(firstName),lastName is\(lastName),age is\(age),score is\(score).")
}
}
var student =Student.init()
student.firstName ="Jonny"
student.lastName ="Deng"
student.age =25
student.score =99
student.showMessage()
student = Student.init(firstName:"Jenny", lastName:"Yang", score:59)
student.age =18
student.showMessage()