Swift 2.0 day05

01-extension

//: Playground - noun: a place where people can play

importUIKit

varstr ="Hello, playground"

// extention: Double添加計(jì)算屬性

extensionDouble{

//默認(rèn)get以及{}可以省略

varkm:Double{returnself*1_000.0}

varm:Double{returnself}//基本單位:m

varcm:Double{returnself/100.0}

varmm:Double{returnself/1_000.0}

varft:Double{returnself/3.28084}

}

letimDouble:Double=100.85.km

letimMeter:Double=1.85.m

//對(duì)Int結(jié)構(gòu)體添加計(jì)算屬性和自定義方法

extensionInt{

varsquare:Int{returnself*self}

varcube:Int{returnself*self*self}

//自定義方法:重復(fù)執(zhí)行多個(gè)任務(wù)(邏輯)

funcrepetitions(task: () ->Void) {

for_in0..

task()

}

}

}

letimInt =10

funcrepeatFunc() {

print("repeat!!!!")

}

10.repetitions(repeatFunc)

//自定義的類额获,使用擴(kuò)展的方式,添加自定義的方法(method)

structPoint {

varx =0.0

vary =0.0

}

structSize {

varwidth =0.0

varheight =0.0

}

classRectangle {

varorigin =Point()

varsize =Size()

init(origin:Point, size:Size) {

self.origin= origin

self.size= size

}

//.......

}

extensionRectangle{

//添加平移方法

functranslate(x:Double, y:Double) {

self.origin.x+= x

self.origin.y+= y

}

}

letrectangle =Rectangle(origin:Point(), size:Size(width:20, height:100))

rectangle.translate(-5, y:5)

rectangle.origin.x



02-generic

//: Playground - noun: a place where people can play

importUIKit

varstr ="Hello, playground"

funcswapTwoInt(inouta:Int,inoutb:Int) {

(a, b) = (b, a)

}

vara:Int=0

varb:Int=6

swapTwoInt(&a, b: &b)

a

b

funcswapTwoDouble(inouta:Double,inoutb:Double) {

(a, b) = (b, a)

}

//使用泛型函數(shù)優(yōu)化上面問(wèn)題: T: template;

funcswapTwoData(inouta:T,inout_b:T) {

(a, b) = (b, a)

}

varhello ="hello"

varbye ="bye"

swapTwoData(&hello, &bye)

hello

bye

//系統(tǒng)默認(rèn)提供了一個(gè)交換兩個(gè)任意類型的函數(shù)

//swap(&<#T##a: T##T#>, &<#T##b: T##T#>)

//泛型類型

//聲明三個(gè)容器類(數(shù)組/字典/集合)

vararray =Array()

vararrayTwo: [Int] = []

vardictionary =Dictionary()

varset =Set()

//自定義泛型結(jié)構(gòu)體:描述棧Stack

/*棧:后進(jìn)先出

*結(jié)構(gòu)體:屬性(數(shù)組)、方法(入棧/出棧/是否為空)

*

*/

varitems = [Int]()

structStack {

//數(shù)組,存儲(chǔ)棧中的數(shù)據(jù)

varitems = [T]()

//棧是否為空

funcisEmpty() ->Bool{

returnitems.count==0

}

//入棧: items數(shù)組的最后添加數(shù)據(jù)

mutatingfuncpush(item:T) {

items.append(item)

}

//出棧:刪除數(shù)組的最后一項(xiàng)

mutatingfuncpop() ->T? {

//if self.isEmpty() {

//return nil

//} else {

//return items.removeLast()

//}

guard!self.isEmpty()else{

returnnil

}

returnitems.removeLast()

}

}

//對(duì)上面的泛型結(jié)構(gòu)體擴(kuò)展

extensionStack{

//添加只讀計(jì)算屬性,獲取棧中最上面的item(數(shù)組的最后一個(gè))

vartopItem:T? {returnitems.last}

//自定義的方法,返回當(dāng)前棧中數(shù)據(jù)個(gè)數(shù)(數(shù)組的個(gè)數(shù))

funccount() ->Int{

returnitems.count

}

}

//var array = Array()

//實(shí)例化

varstackWithInt =Stack()

stackWithInt.push(1)

stackWithInt.push(2)

stackWithInt.push(3)

stackWithInt.pop()

stackWithInt.topItem

varstackWithString =Stack()

stackWithString.push("Maggie")

stackWithString.push("Bob")

stackWithString.push("Jonny")

stackWithString.topItem

stackWithString.count()

stackWithString.pop()

/**

*課堂練習(xí):創(chuàng)建隊(duì)列結(jié)構(gòu)體(泛型); FIFO:先進(jìn)先出

*屬性(數(shù)組)

*方法(添加數(shù)據(jù)到隊(duì)列;移除隊(duì)列;是否為空)

*/

/* GCD隊(duì)列分類:

*串行隊(duì)列Serial Queue(創(chuàng)建);并行隊(duì)列Concurrent Queue(創(chuàng)建)嫂侍;主隊(duì)列Main Queue(獲取);全局隊(duì)列Global Queue(獲取)

//回到主線程

dispatch_async(dispatch_get_main_queue(), ^{})

*/

structQueue {

//數(shù)組荚坞,存儲(chǔ)隊(duì)列中的數(shù)據(jù)

varitems = [T]()

//隊(duì)列是否為空

funcisEmpty() ->Bool{

returnitems.count==0

}

//添加:items數(shù)組的最后添加數(shù)據(jù)

mutatingfuncaddItemToQueue(item:T) {

items.append(item)

}

//移除:刪除數(shù)組的第一項(xiàng)

mutatingfuncremoveFromQueue() ->T? {

guard!self.isEmpty()else{

returnnil

}

returnitems.removeFirst()

}

//返回隊(duì)列中的數(shù)據(jù)個(gè)數(shù)

funccountInQueue() ->Int{

returnitems.count

}

//使用自定義方法獲取該隊(duì)列中的第一項(xiàng)

funcfirstItemFromQueue() ->T? {

returnitems.first

}

}

//實(shí)例化

varqueueWithString =Queue()

queueWithString.addItemToQueue("Maggie")

queueWithString.addItemToQueue("Bob")

queueWithString.addItemToQueue("Jonny")

queueWithString.removeFromQueue()

queueWithString.countInQueue()

queueWithString.firstItemFromQueue()

//簡(jiǎn)單例子

structPair {

vara:T1

varb:T2

}

vardic =Dictionary()

varpair =Pair(a:0, b:"hello")

pair.a

pair.b



03-class-inher-poly

//: Playground - noun: a place where people can play

importUIKit

varstr ="Hello, playground"

/*封裝Encapsulation

* 1.類的繼承Inheritance/Inherite

* 2.類的多態(tài)Polymorphism

*/

classAvatar {

//兩個(gè)存儲(chǔ)屬性

varname:String

varlife =100

varisAlive:Bool=true

init(name:String) {

self.name= name

}

//計(jì)算屬性:描述當(dāng)前角色的名字

vardescription:String{

get{

return"I'm Avatar\(name)"

}

}

//自定義方法:收到攻擊

funcbeAttacked(attack:Int) {

life-= attack

iflife<=0{

isAlive=false

}

}

}

//玩家

classUser:Avatar{

//新添加兩個(gè)存儲(chǔ)屬性

//分?jǐn)?shù)/級(jí)別

varscore =0

varlevel =0

//重寫(xiě)父類的description計(jì)算屬性(重寫(xiě)get方法)

overridevardescription:String{

get{

return"I'm User\(name)"

}

}

//添加自定義方法

funcgetScore(score:Int) {

self.score+= score

ifself.score>level*100{

self.level+=1

}

}

}

classMagician:User{

//魔法值

varmagic =100

//重寫(xiě)父類的description計(jì)算屬性(重寫(xiě)get方法)

overridevardescription:String{

get{

return"I'm Magician\(name)"

}

}

funcheal(user:User) {

user.life+=10

}

}

//戰(zhàn)士

classWarrior:User{

varweapon:String?

//重寫(xiě)/覆蓋

overridefuncbeAttacked(attack:Int) {

life-= attack /2

iflife<=0{

isAlive=false

}

}

}

classMonster:Avatar{

funcattack(user:User, amount:Int) {

user.beAttacked(amount)

}

}

finalclassZombie:Monster{

vartype ="Default"

}

//多態(tài)性

funcprintBasicInfo(avatar:Avatar) {

print("The avatar's name is\(avatar.name)")

print("The life is\(avatar.life). He is\(avatar.isAlive)?")

}

//實(shí)例對(duì)象

varwarrior=Warrior(name:"Warrior")

varmagician =Magician(name:"Harray Potter")

magician.name

magician.heal(warrior)

warrior.life

warrior.beAttacked(10)

warrior.life

varzombie=Zombie(name:"default Zombie")

zombie.attack(warrior, amount:20)

warrior.life

magician.heal(warrior)

varmonster=Monster(name:"Monster")

printBasicInfo(magician)

printBasicInfo(warrior)

printBasicInfo(zombie)

printBasicInfo(monster)

vararray: [Avatar] = [warrior,magician,zombie,monster]

forvalueinarray{

print("\(value.description)")

}

/*了解:編譯型語(yǔ)言的特性

*編譯期(編譯時(shí)類型) +運(yùn)行期(運(yùn)行時(shí)類型)

*/

/**

* 1.重寫(xiě)/覆蓋(overwrite/override):子類的方法覆蓋父類的方法(要求方法名和參數(shù)名都相同)

* 1.1場(chǎng)景:父類的屬性和方法不足以來(lái)描述子類的特性挑宠,需要用到重寫(xiě)/覆蓋

* 1.2 Swift語(yǔ)言中,重寫(xiě)父類的方法颓影;也可以重寫(xiě)父類的計(jì)算屬性(get/set)

* 2.重載(overload):在同一個(gè)類中的兩個(gè)或者兩個(gè)以上的方法各淀,擁有相同的方法名,但是參數(shù)不相同(個(gè)數(shù)/類型)诡挂。最常見(jiàn)的重載就是類的構(gòu)造函數(shù)(init方法)

*

*/







Day05

新內(nèi)容

類:擴(kuò)展Extension(OC: Category);泛型(Generic)

類:繼承/多態(tài)...

1.extension:擴(kuò)展:

->對(duì)象:系統(tǒng)存在的和自定義 ->/結(jié)構(gòu)體/枚舉/協(xié)議

->內(nèi)容:添加計(jì)算型屬性; 自定義的方法(也包括構(gòu)造方法)

2.樣例:對(duì)Double結(jié)構(gòu)體添加計(jì)算屬性揪阿;自定義類添加方法(extension)

[ 01-extension ]

NSArray

Generic: 泛型

1. 描述:不指定任何類型的類型; 分為泛型函數(shù)和泛型類型

2. 問(wèn)題:交換兩個(gè)整型/字符串/Float/Double/類型數(shù)據(jù);

-> 方法的邏輯:交換兩個(gè)數(shù)據(jù)疗我;只是類型不同

-> 解決方案:使用泛型函數(shù)

3.樣例:如何使用泛型函數(shù)解決“問(wèn)題”

[ 02-generic ]

/1603/08_Swift/Day05/Day05-AM1.zip

4.樣例:創(chuàng)建泛型類型:描述”棧”結(jié)構(gòu)體

[ 02-generic ]

/1603/08_Swift/Day05/Day05-AM2.zip

5. 課堂練習(xí):仿照”椖衔妫”結(jié)構(gòu)體吴裤,創(chuàng)建“隊(duì)列”結(jié)構(gòu)體

/1603/08_Swift/Day05/Day05-AM3.zip

——————————— 下午內(nèi)容 ———————

6. 類的繼承: OC/Swift語(yǔ)言都是單繼承

7.樣例:創(chuàng)建下面六個(gè)類,繼承關(guān)系如下:

[ 03-class-inher-poly ]

viewController: UIViewController

/1603/08_Swift/Day05/Day05-PM1.zip

#prama mark - UITableViewDataSource

-> Swift:

extension ViewController {

func tableView…..

}

#prama mark - UITableViewDelegate

extension ViewController {

func tableView…..

}

樣例:計(jì)算器樣例(不包含協(xié)議語(yǔ)法)

1. 課堂版本:UIStackView(iOS9新視圖)

2. 案例:使用Swift語(yǔ)法實(shí)現(xiàn)

[ Calculator ]

終結(jié)版本:

Day05知識(shí)點(diǎn):

—> 擴(kuò)展extension相關(guān):

1.描述:對(duì)已存在的和自定義的類/結(jié)構(gòu)體/枚舉添加計(jì)算屬性和方法

2.語(yǔ)法extension關(guān)鍵詞

—> 泛型Generic相關(guān):

1. 泛型函數(shù)

funcswapTwoData(inouta:T,inout_b:T) {

(a, b) = (b, a) }

2. 泛型類型

structQueue {}

—>重寫(xiě)和重載override

1.重寫(xiě)/覆蓋(overwrite/override):子類的方法覆蓋父類的方法(要求方法名和參數(shù)名都相同)

1.1場(chǎng)景:父類的屬性和方法不足以來(lái)描述子類的特性溺健,需要用到重寫(xiě)/覆蓋

1.2 Swift語(yǔ)言中麦牺,重寫(xiě)父類的方法;也可以重寫(xiě)父類的計(jì)算屬性(get/set)

2.重載(overload):在同一個(gè)類中的兩個(gè)或者兩個(gè)以上的方法鞭缭,擁有相同的方法名剖膳,但是參數(shù)不相同(個(gè)數(shù)/類型)。最常見(jiàn)的重載就是類的構(gòu)造函數(shù)(init方法)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岭辣,一起剝皮案震驚了整個(gè)濱河市吱晒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沦童,老刑警劉巖仑濒,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異偷遗,居然都是意外死亡墩瞳,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門氏豌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喉酌,“玉大人,你說(shuō)我怎么就攤上這事泵喘±岬纾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵纪铺,是天一觀的道長(zhǎng)相速。 經(jīng)常有香客問(wèn)我,道長(zhǎng)霹陡,這世上最難降的妖魔是什么和蚪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任止状,我火速辦了婚禮烹棉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怯疤。我一直安慰自己浆洗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布集峦。 她就那樣靜靜地躺著伏社,像睡著了一般抠刺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摘昌,一...
    開(kāi)封第一講書(shū)人閱讀 52,793評(píng)論 1 314
  • 那天速妖,我揣著相機(jī)與錄音,去河邊找鬼聪黎。 笑死罕容,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稿饰。 我是一名探鬼主播锦秒,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼喉镰!你這毒婦竟也來(lái)了旅择?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤侣姆,失蹤者是張志新(化名)和其女友劉穎生真,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體铺敌,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汇歹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偿凭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片产弹。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖弯囊,靈堂內(nèi)的尸體忽然破棺而出痰哨,到底是詐尸還是另有隱情,我是刑警寧澤匾嘱,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布斤斧,位于F島的核電站,受9級(jí)特大地震影響霎烙,放射性物質(zhì)發(fā)生泄漏撬讽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一悬垃、第九天 我趴在偏房一處隱蔽的房頂上張望游昼。 院中可真熱鬧,春花似錦尝蠕、人聲如沸烘豌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)廊佩。三九已至囚聚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間标锄,已是汗流浹背顽铸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留料皇,地道東北人跋破。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓶蝴,于是被迫代替她去往敵國(guó)和親毒返。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容