三個swift文件:
主文件:main.swift:
importFoundation
//如果在swift中引用其他我們自定義的類,不用導(dǎo)入頭文件,直接使用
//如果是導(dǎo)入第三方的話,就需要引用
//面向過程:注重功能實(shí)現(xiàn)的一個過程
//面向?qū)ο?,注重?shí)現(xiàn)功能所要參與的對象
//創(chuàng)建Person對象
//類名()代表該類調(diào)用系統(tǒng)默認(rèn)的實(shí)例化方法
letperson0 =Person()
//訪問對象的屬性采用點(diǎn)語法
println(person0.name)
println(person0.age)
//給必選類型的屬性進(jìn)行賦值操作
person0.name="lisi"
person0.age=15
println(person0.name)
println(person0.age)
//給可選類型的屬性進(jìn)行賦值操作
person0.grade="五年級"
person0.count=5
println(person0.grade!)
println(person0.count!)
//創(chuàng)建animal對象,并且賦值
letanimal0 =Animal()
animal0.age=8
animal0.type="smallDog"
println(animal0.age)
println(animal0.type!)
letdog =Animal(age:2, type:"cat")
println(dog.age)
println(dog.type!)
//練習(xí)題1
//新建兩個類,每一個類有三個屬性,給每一個類重載構(gòu)造方法并使用TA
//鍵值編碼:KVC(key-value-coding)
//是一種通過字符串間接訪問對象屬性的一種方式
letanimal1 =Animal()
animal1.setValue("horse", forKey:"type")
//key要跟你要設(shè)置的屬性的名字一樣的字符串
println(animal1.type!)
//在進(jìn)行KVC賦值的時候,類的屬性如果是基本數(shù)據(jù)類型的話,不能是可選類型的
animal1.setValue(22, forKey:"age")
println(animal1.age)
//字典轉(zhuǎn)模型
letanimal2 =Animal()
letdict = ["type":"monkey","age":12]
animal2.setValue(dict["type"], forKey:"type")
animal2.setValue(dict["age"], forKey:"age")
animal2.setValuesForKeysWithDictionary(dict)
println(animal2.type)
println(animal2.age)
//setValuesForKeysWithDictionary(dict)會將字典dict里面的key跟對象屬性的名字進(jìn)行對比,如果一樣的話就將key對應(yīng)的value設(shè)置到對象的屬性上,會在底層重復(fù)的調(diào)用setValue(value,forKey:key)
person.swift:
importFoundation
//類是一類物體的共有性抽象
//對象是某一類的一個具體
classPerson:NSObject{
//類一般有屬性和方法構(gòu)成
//定義屬性:
// var name:String = "zhangsan"
//var age:Int = 12
//必選類型的初始化
varname:String
varage:Int
//可選類型初始化
vargrade:String?
varcount:Int?
//override表示該方法是從父類那邊繼承過來的
//外部使用類名()方式創(chuàng)建對象就會默認(rèn)調(diào)用下面該方法
overrideinit() {
//必選類型(不是可選類型)的初始化一定要在調(diào)用super.init()之前完成
name="zhangsan"
age=27
super.init()//調(diào)用父類的初始化方法
}
}
animal.swift:
importFoundation
//重載構(gòu)造函數(shù)
classAnimal:NSObject{
varage:Int=0
vartype:String?
//重載構(gòu)造函數(shù)
init(age:Int,type:String){
super.init()//只要在init()方法里面,一定要調(diào)用super.init()
//如果參數(shù)列表參數(shù)名字和類的屬性名一樣,就需要使用self調(diào)用,否則不用
self.age= age
self.type= type
}
//如果重載了構(gòu)造方法,同時沒有寫上系統(tǒng)默認(rèn)的構(gòu)造方法,外界是沒法訪問到該類默認(rèn)的構(gòu)造方法
overrideinit() {
super.init()
}
//這個方法是為了解決字典里面的一些key值該模型里面沒有導(dǎo)致的系統(tǒng)奔潰
overridefuncsetValue(value:AnyObject?, forKey key:String) {
}
/*
init(tempAge:Int,tempType:String){
super.init()
age = tempAge
type = tempType
}
*/
}