lập trình ios với swift

download lập trình ios với swift

of 52

description

Tài liệu hướng dẫn từng bước lập trình ios với ngôn ngữ lập trình swift. Tài liệu được viết bằng tiếng việt bởi trung tâm tin học Khoa phạm, tại địa chỉ khoapham.vn.

Transcript of lập trình ios với swift

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 2 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 3 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Mc Lc

    I. C bn v lp trinh Swift ........................................................................................... A. Hng s v bin ............................................................................................................ 6

    1. Khai bo hng v bin ............................................................................................... 6 2. Tn Hng v Tn Bin. .............................................................................................. 7 3. Print hng v bin ..................................................................................................... 7

    B. Integer .......................................................................................................................... 8 1. Gi tr cao nht trong Interger .................................................................................... 8 2. Int .............................................................................................................................. 8 3. UInt ........................................................................................................................... 8

    C. Kiu Float v kiu Double ............................................................................................. 8 D. Kiu Safety v Kiu Inference ....................................................................................... 9 E. Chuyn i kiu s(Numeric Type Conversion) ............................................................ 9

    1. Chuyn kiu s nguyn(Integer Conversion) ............................................................. 9 2. Chuyn kiu Int vi Float/Double............................................................................... 9

    F. Kiu Aliases ................................................................................................................ 10 G. Kiu Boolean .............................................................................................................. 10 H. Kiu Tuple .................................................................................................................. 11 I. Optional........................................................................................................................ 11 J. Error Handling ............................................................................................................. 11

    II. Ton t c bn..................................................................................................... 12 1. Terminology(Thut ng) .......................................................................................... 12 2. Assignment Operator(Ton t gn) ......................................................................... 12 3. Arithmetic Operators(Ton t ton hc) .................................................................. 13 4. Remainder Operator(Ton t s d) ....................................................................... 13 5. Floating-Point Remainder Calculations(Ton t s d thp phn) .......................... 13 6. Increment and Decrement Operators(Ton t tng v gim dn) ............................ 14 7. Compound Assignment Operators(Ton t gn phc hp) ..................................... 14 8. Comparison Operators(Ton t so snh) ................................................................ 14 9. Ternary Conditional Operator(Ton t iu kin tam phn) ..................................... 15 10. Nil Coalescing Operator(ton t kt hp nil).......................................................... 15 11. Range Operators(Ton t phm vi) ....................................................................... 15 12. Logical Operators(Ton t logic) ........................................................................... 16 13. Logical AND Operator(Ton t Logic AND) ........................................................... 16 14. Logical OR Operator(Ton t Logic OR) ............................................................... 17

    III. Kiu String and Kiu Character ........................................................................... 17 A. String Literal(Chui k t) ............................................................................................ 18 B. Khi to chui ............................................................................................................. 18 C. String Mutability(Bin i chui).................................................................................. 18 D. Character .................................................................................................................... 18 E. Interpolation(ni suy chui) ......................................................................................... 19 F. Counting Character ..................................................................................................... 19

    IV. Collection Type ................................................................................................... 19 A. Array(mng) ................................................................................................................ 20

    1. Iterating Over an Array(Duyt qua mt mng) ......................................................... 21 B. Set .............................................................................................................................. 21

    1. Thao tc c bn ...................................................................................................... 21 2. Performing Set Operations ...................................................................................... 22

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 4 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    3. Set Membership and Equality .................................................................................. 23 C. Dictionary ................................................................................................................... 24

    V. Control Flow ......................................................................................................... 25 A. For-In .......................................................................................................................... 25 B. While Loops ................................................................................................................ 27

    1. While ....................................................................................................................... 27 2. Repeat-While .......................................................................................................... 27 3. If .............................................................................................................................. 27 4. Swich ...................................................................................................................... 28 5. Where ..................................................................................................................... 28

    C. Control Transfer Statements ....................................................................................... 29 1. Continue .................................................................................................................. 29 2. Break ....................................................................................................................... 29 3. Fallthrough .............................................................................................................. 29

    VI. Function .............................................................................................................. 30 A. Defining and Calling Functions ................................................................................... 30 B. Function Parameters and Return Values .................................................................... 30 C. Func khng c kiu tr v ........................................................................................... 30 D. Func c kiu tr v ..................................................................................................... 31 E. Func nhn tham s v c kiu tr v .......................................................................... 31 F. Func nhn nhiu tham s v c kiu tr v ................................................................. 31 G. Func m k t trong chui ......................................................................................... 31 H. Func tr v nhiu gi tr .............................................................................................. 32 I. Func nhiu tham s Variadic ........................................................................................ 32 J. Func InOut .................................................................................................................. 33 K. Bin bng Func ........................................................................................................... 33

    VII. Closure .............................................................................................................. 33 1. Closure Expressions ............................................................................................... 34 2. Closure Expression Syntax...................................................................................... 34

    VIII. Enumeration(Lit K) ........................................................................................ 35 1. Enumeration Syntax ................................................................................................ 35 2. Matching Enumeration Values with a Switch Statement .......................................... 35

    IX. Classes and Structures ....................................................................................... 36 1. Comparing Classes and Structures ......................................................................... 36

    B. Class and Structure Instances .................................................................................... 37

    X. Subscript .............................................................................................................. 38 A. Subscript Syntax ......................................................................................................... 38

    XI. Inheritance(K Tha) .......................................................................................... 39 A. Defining a Base Class ................................................................................................. 39

    XII. Property ............................................................................................................. 39

    XIII. Method .............................................................................................................. 39 A. Subclass(lp con) ....................................................................................................... 40 B. Overriding(ghi ) ....................................................................................................... 40 C. Preventing Overrides(Ngn ghi ) ............................................................................. 41

    XIV. Initialization(Khi to) ....................................................................................... 41

    XV. Deinitialization(Hm Hu) .................................................................................. 41

    XVI. Optional Chaining ............................................................................................. 42

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 5 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    XVII. Handling Error ................................................................................................. 44 A. Representing Errors .................................................................................................... 44 B. Throwing Errors .......................................................................................................... 44 C. Catching and Handling Errors ..................................................................................... 44

    XVIII. Tng hp nhng im khc trong Swift 2.0 ................................................... 46 A. Defer ........................................................................................................................... 46 B. Repeat-While .............................................................................................................. 46 C. Continue ..................................................................................................................... 46 D. Where ......................................................................................................................... 47 E. Fallthrough .................................................................................................................. 47 F. Guard .......................................................................................................................... 47 G. Set .............................................................................................................................. 48

    1. Khai Bo.................................................................................................................. 48 2. m Phn t ........................................................................................................... 48 3. Xo Phn t ............................................................................................................ 48 4. Kim tra phn t ...................................................................................................... 48 5. Ton t c bn ........................................................................................................ 49 6. Set Membership and Equality ................................................................................. 49

    H. Handling Error ............................................................................................................ 50 1. Enum ....................................................................................................................... 50 2. Throws .................................................................................................................... 50 3. Do-Catch ................................................................................................................. 50

    hc kho y v chuyn su hn bn c th tham gia kho hc lp trnh iOS ti trung tm o to tin hc KhoaPham. ................................................................. 50

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 6 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    I.C bn v lp trinh Swift Swift l mt ngn ng lp trnh mi cho pht trin ng dng iOS, OS X, Watch OS, Swift c kh nhiu im ging vi Objective C. Swift cung cp cc kiu c bn nh Int cho cc s nguyn, Double v Float cho d thc , Bool cho gi tr True hoc False v String cho chui k t. Swift cng cung cp 3 kiu Collection nh Array, Set v Dictionary qun l dng danh sch mng. Swift s dng cc bin lu tr v tham chiu gi tr bi mt tn xc nh. Swift s dng nhiu nhng gi tr khng thay i c gi l hng s v mnh hn nhiu so vi hng s trong C. Hng s c s dng gip cho code r rng v an ton hn trong lc bn lm vic vi cc gi tr m khng cn thay i. Ngoi cc kiu quen thuc , Swift cn gii thiu mt kiu mi hon ton khng c trong Objective C, l kiu Tuple. Tuple cho php bn to v gom nhm cc gi tr khng cng kiu d liu. Tuple c th tr ra nhiu gi tr t mt hm nh l mt gi tr duy nht. Swift cng gii thiu cc kiu Optional x l cc trng hp khng c gi tr. Optional c th c mt gi tr hoc khng c gi tr. Optional tng t nh s dng nil vi pointer trong objective C. Optional an ton v l mt trong nhng tnh nng mnh m nht ca Swift. Swift mun bn phi r rng v cc kiu gi tr trong qu trnh code. iu ny cho php bn nm bt v sa li cng sm cng tt trong qu trnh pht trin.

    A.Hng s v bin Hng l gi tr khng c thay i sau khi n c khai bo. Bin l gi tr c th c thay i bng mt gi tr khc khi cn. 1.Khai bo hng v bin

    Hng v bin phi c khai bo trc khi s dng. Bn phi khai bo cc hng vi t kho l let v bin vi t kho l var.

    Bn c th khai bo nhiu hng hoc nhiu bin nh sau:

    //Hng s let hangso = 10

    //Bin

    var bien = 20

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 7 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Bn c th cung cp cc kiu khi khai bo bin hoc hng, r rng hn cho kiu gi tr. c vit bng du hai chm v pha sau tn bin hoc tn hng.

    y c th c c nh sau: khai bo bin gi l xinchao c kiu String. Nh vy ta ch c th gn chui k t vo cho bin xinchao. By gi ta c th gn chui k t bt k vo cho bin xinchao:

    Bn c th khai bo nhiu bin c cng kiu nh sau:

    2.Tn Hng v Tn Bin. Tn hng v tn bin c th cha hu ht bt k character(k t), bao gm c k t Unicode.

    Tn hng v tn bin khng th cha cc k t khong trng, k hiu ton hc, cc mi tn... v khng th bt u bng mt con s. Khi bn khai bo mt hng hoc mt bin c kiu nht nh, bn khng th khai bo li na vi cng tn, hoc thay i kiu khc. Bn c th thay i gi tr ca bin c cng kiu.

    Vi gi tr ca hng th khng th thay i khi c khai bo.

    3.Print hng v bin Bn c th print trc kt qu ca hng hoc bin xem hoc kim tra.

    //Khai bo nhiu hng hoc nhiu bin trn 1 dng. var a = 1, b = 2, c = 3

    var xinchao:String

    xinchao = "HelloWorld"

    //Khai bo nhiu bin c cng kiu trn 1 dng.

    var x, y, z:Double

    //Tn Hng v Bin. let = 3.14159

    let = ""

    let = "dogcow"

    //Thay i gi tr ca bin xinchao t HelloWorld thnh KhoaPham.Vn xinchao = "KhoaPham.Vn"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 8 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Swift 1 ta c 2 hm in l print, println nhng vi Swift 2.0 ch cn hm print. Ta c th dng print in ra nhng thng ip phc tp hn. Bao gm nhng cc gi tr hin ti ca hng v bin.

    B.Integer L s nguyn. Swift cung cp Sign v Unsign integer trong mu 8, 16, 32 v 64 bit. 1.Gi tr cao nht trong Interger

    Bn c th kim tra gi tr cao nht ca tng kiu integer vi thuc tnh Max

    2.Int

    Bn khng cn phi chn mt kch thc c th no bi Int s thay th ht tt c. Tr khi bn mun chn mt kch thc c th ca integer. Nn s dng Int cho cc gi tr s nguyn h tr on m nht qun v kh nng tng thch hn.

    3.UInt

    Bn khng cn phi chn mt kch thc c th no bi UInt s thay th ht tt c. Tr khi bn mun chn mt kch thc c th ca integer. Nn s dng UInt cho cc gi tr s nguyn dng h tr on m nht qun v kh nng tng thch hn.

    C.Kiu Float v kiu Double L mt dng phn s. C th lu tr nhng s thp phn m kiu integer khng lu tr c.Swift cung cp 2 kiu l:

    - Float(32-bit) - Double(64-bit)

    //Print Hng v Bin. print(xinchao) //kt qu: "KhoaPham.Vn"

    //Print thng ip phc tp hn print("Kho Hc iOS ca Trung Tm \(xinchao)") //Kt qu: Kho Hc iOS ca Trung Tam KhoaPham.Vn

    var maxValue:UInt8 = UInt8.max //kt qu : 255

    var max:Int = Int.max //Kt qu: 9223372036854775807

    var max2:UInt = UInt.max //Kt qu: 18446744073709551615

    //Gi tr lu tr ln nht ca kiu float

    var float:Float = FLT_MAX //Kt qu: 3.402823e+38

    //Gi tr lu tr ln nht ca kiu double var double:Double = DBL_MAX //Kt qu: 1.797693134862316e+308

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 9 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    D.Kiu Safety v Kiu Inference Swift l mt ngn ng lp trnh an ton. V th Swift mun bn phi khai bo r rng v cc kiu gi tr. Nu c bn khai bo bin kiu String th bn khng th truyn gi tr kiu Int hoc ngc li. Bi v Swift thc hin kim tra kiu (type check) khi bin dch v bo hiu nhng kiu khng ph hp l li. iu ny cho php bn nm bt v sa li cng sm cng tt. Type check gip bn trnh c li khi bn ang lm vic vi cc kiu gi tr khc nhau. Tuy nhin, khng c ngha l bn phi xc nh kiu ca mi hng v bin m bn khai bo. Nu bn khng ch nh cc kiu gi tr, Swift s s dng kiu Inference tm ra kiu thch hp da trn gi tr m bn cung cp. Kiu Inference t bit hu ch khi bn khai bo mt hng hoc mt bin c gi tr ban u.

    E.Chuyn i kiu s(Numeric Type Conversion) Chuyn cc kiu Integer v mt kiu ng nht ph hp cc tnh hung s dng. Trnh tnh trng trn d liu, ti u ho b nh. 1.Chuyn kiu s nguyn(Integer Conversion)

    v d di hng so1 v hng so2 c 2 kiu s nguyn khc nhau, v th ta phi p kiu ca hng so1 sang cng kiu vi hng so2 l kiu Int16

    2.Chuyn kiu Int vi Float/Double

    v d di hng so3 c kiu Int v hng so4 c kiu Double, v th ta phi u tin p kiu Int sang Double

    //Kiu Inference s hiu l kiu String var chuoi = "KhoaPham.vn"

    //Kiu Inference s hiu l kiu Int var soInt = 23

    let so1: Int8 = 2 let so2: Int16 = 1500 let tong = so2 + Int16(so1)

    //Int and Float/Double let so3 = 2 let so4 = 0.2356 let tong2so = Double(so3) + so4 //Kt qu: 2.2356

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 10 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    F.Kiu Aliases Thay th mt kiu hin c. c khai bo vi t kho typealias.

    Ta c th thy kiu Aliases c tn alias c nhn kiu UInt32 v bin so5 c kiu alias. Thc cht l bin so5 nhn kiu UInt32 thng qua alias T v d trn ta thy kiu aliases hu ch khi mun cp n mt kiu tn ti vi tn khc.

    G.Kiu Boolean y l kiu tr v hai gi tr True v False.

    Thng c s dng nhiu trong trng hp so snh, cu lnh if

    Trong trng hp bn dng cu lnh if so snh gi tr kiu s:

    //Kiu Aliases

    typealias alias = UInt32 var so5:alias = 5

    //Kiu Boolean

    let dung = true let sai = false

    if sai{ print("Gi tr true") }else{ print("Gi tr false") } //Kt qu: "Gi tr false"

    let kieuso = 1

    //Trng hp sai s xut hin li if kieuso{ } //Trng hp ng if kieuso == 1{ }

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 11 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    H.Kiu Tuple L mt kiu mi trong Swift. Kiu Tuple c th nhm cc gi tr v cc gi tr khng nht thit phi cng kiu.

    Bn c th nhm nhiu gi tr khc kiu li vi nhau.V ta c th ly tng gi tr ra nh sau:

    Bn c th khai bo v ly gi tr bng cch sau:

    I.Optional Bn c th s dng Optional trong tnh hung v gi tr khng c.Mt Optional c th c 1 gi tr v n bng x hoc khng c mt gi tr no.

    J.Error Handling Error Handling mi c apple nng cp vo Swift 2.0. Bn c th s dng Error Handling x l nhng li m bn c th gp phi. Khi mt func gp phi mt tnh trng li n s nm ra li v bn c th bt li v x l thch hp.

    //Kiu Tuple

    let tuple = ("khoapham",123456)

    print("username: \(tuple.0) v password: \(tuple.1)") //Kt qu: "username: khoapham v password: 123456"

    let tuple2 = (username: "khoapham", password: 123456) print("username: \(tuple2.username) v password: \(tuple2.password)") //Kt qu: "username: khoapham v password: 123456"

    //Optional let optional: String? = nil if optional == nil{ print("nil") } //Kt qu: "nil"

    //Error Handling func XuatLoi() throws{ } do{ try XuatLoi() }catch{ }

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 12 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    II.Ton t c bn Ton t l mt k hiu c bit hoc cm t m bn s dng kim tra, thay i, hoc kt hp cc gi tr. V d, cc ton t cng (+) thm hai s vi nhau (nh let i = 1 + 2). V d phc tp hn bao gm ton t logic AND && (nh if enteredDoorCode && passedRetinaScan) v ton t tng dn ++ i, l mt lnh tt tng gi tr ca i ln 1. Swift h tr chun ton t C v ci thin mt s tnh nng loi b cc li m ha ph bin. Ton t gn (=) khng tr v mt gi tr, ngn chn n c s dng ln ln vi ton t so snh (==). Ton t s hc (+, -, *, /,% v vv) pht hin v khng cho php trn gi tr, trnh nhng kt qu bt ng khi lm vic vi cc con s ln hn hay nh hn so vi phm vi cho php gi tr ca cc kiu lu trphy chng. Bn c th quyt nh tham gia vo hnh vi trn gi tr bng cch s dng cc ton trn Swift, nh c m t trong Overflow Operators. Khng ging nh C, Swift cho php bn thc hin tm s d (%) tnh trn s phy ng. Swift cng cung cp hai ton t phm vi (a ..

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 13 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Nu pha bn phi ca vic gn l mt b vi nhiu gi tr, cc yu t ca n c th c phn tch ra thnh nhiu hng hoc bin cng mt lc: Khng ging nh cc ton t gn trong C v Objective-C, cc ton t gn trong Swift khng t tr v mt gi tr. Tuyn b sau y l khng hp l:

    3.Arithmetic Operators(Ton t ton hc) Swift h tr bn ton t ton hc tiu chun cho tt c cc kiu s: - Php cng (+)

    - Php tr (-) - Php nhn (*) - Phn chia (/)

    Khng ging nh cc ton t trong C v Objective-C, cc ton t s hc Swift khng cho php cc gi tr trn theo mc nh. Bn c th chn tham gia vo hnh vi trn gi tr bng cch s dng cc ton trn Swift (chng hn nh a & + b). Xem Overflow Operators. T t cng cn h tr ni chui String:

    4.Remainder Operator(Ton t s d) Ton t s d (a% b) tnh ton ra bao nhiu bi s ca b s ph hp vi bn a v tr v gi tr c li (gi l phn cn li). y l cch ton t s d hot ng. tnh ton 10% 8

    5.Floating-Point Remainder Calculations(Ton t s d thp phn) Khng ging nh ton t s d trong C v Objective-C, ton t s d ca Swift cng c th hot ng trn cc s du chm ng:

    let (x,y) = (5, 10) // Kt qu: x = 5, y = 10

    //Arithmetic Operators

    1 + 2 //kt qu: 3

    3 - 1 //kt qu: 2

    5*5 //kt qu: 25

    8/2 //kt qu: 4

    "khoa" + "pham" + ".vn" //Kt qu: khoapham.vn

    //Remainder Operator(Ton t s d)

    10 % 8 //Kt qu: 2

    -10 % 8 //Kt qu: -2

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 14 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    6.Increment and Decrement Operators(Ton t tng v gim dn) Ton t tng dn (++) c ngha l i = i + 1 Ton t gim dn(--) c ngha l i = i -1

    Trong v d trn, let b1 = ++a1 tng gi tr ca a1 trc khi tr v gi tr ca n. y l l do ti sao c a1 v b1 u c gi tr mi l 1. Tuy nhin, let c1 = a1++ tng gi tr ca a1 sau khi tr v gi tr ca c1. iu ny c ngha rng ly gi tr c l 1 v sau a1 c cp nht gi tr bng 2. Tr khi bn cn cc hnh vi c th ca i ++, khuyn bn nn s dng ++ i v i trong mi trng hp, bi v h c nhng hnh vi mong i in hnh ca vic sa i i v tr v kt qu. 7.Compound Assignment Operators(Ton t gn phc hp)

    Ging nh C, Swift cung cp cc ton t gn phc hp kt hp php gn (=) vi cc ton t khc. Mt v d l ton t gn thm (+ =):

    Biu thc a2 + = 2 l vit tt cho a2 = a2 + 2. Hiu qu cho, vic b sung v gn c kt hp thnh mt ton t m thc hin c hai tc v cng mt lc. Mt danh sch y ca cc ton t gn phc hp c th c tm thy trong Expressions. 8.Comparison Operators(Ton t so snh)

    Swift h tr tt c chun ton t so snh trong C: - Bng (a == b) - Khng bng (a! = B) - Ln hn (a> b) - Nh hn (a = b) - Nh hn hoc bng (a 1 //Kt qu: true

    6 < 10 //Kt qu: true

    10 = 20 //Kt qu:false

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 15 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Ton t so snh thng c s dng trong cu lnh if

    9.Ternary Conditional Operator(Ton t iu kin tam phn) Ton t iu kin tam phn l mt ton t c bit vi ba phn, trong c dng question ? answer1: answer2. N l mt phm tt nh gi mt trong hai biu thc da trn mt trong hai gi tr question l true hay false. Nu question l true, n ly answer1 v tr v gi tr ca n; nu false, n ly answer2 v tr v gi tr ca n. if question { answer1 } else { answer2 } v d ny on code (Bool ? 40 : 10) c ngha l nu Bool l true th ly 40 ngc li Bool l false ly 10. y Bool l false nn kt qu soluong bng 30.

    10.Nil Coalescing Operator(ton t kt hp nil)

    Ton t hp nht Nil Nil coalescing operator (a ?? b) tho b mt optional a nu n bao gm mt gi tr, hoc tr v mt gi tr mc nh b nu a l nil. Biu thc b phi ph hp vi kiu ang c lu tr trong a. nil coalescing operator l mt phm tt cho m di y: a != nil ? a! : b on m trn s dng ton t ba ngi v tho buc(a!) truy cp cc gi tr bn trong mt gi khi m khng phi l nil, v tr v mt gi tr b. Ton t hp nht Nil cung cp mt cch thanh lch hn ng gi kim tra iu kin ny v unwrapping trong mt hnh thc ngn gn v d c.

    11.Range Operators(Ton t phm vi)

    Swift gm 2 lot ton t l: Closed Range Operator v Half-Open Range Operator a)Closed Range Operator Phm vi ton t kp kn (a b) nh ngha mt phm vi chy t a n b, v bao gm cc gi tr a v b. Gi tr ca a khng ln hn b.

    //Ternary Conditional Operator let tao = 20 let Bool = false let soluong = tao + (Bool ? 40 : 10) //Kt qu: soluong = 30

    let red = "red" var chuoi:String? //mc nh l nil var Mau = chuoi ?? red //nu chuoi bng nil th xut ra red //Kt qu: "red"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 16 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Ton t phm vi khp kn hu ch khi lp qua mt dy m bn mun tt c cc gi tr c s dng, chng hn nh vi mt vng lp for-in:

    b)Half-Open Range Operator

    Ton t bn phm vi (a ..

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 17 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Nu mt trong hai gi tr l false, kt qu cng chung cng s l false. Trong thc t, nu gi tr u tin l false, gi tr th hai thm ch s khng c nh gi, bi v n khng th lm thay i s kt qu cng chung tng ng vi true. iu ny c gi l nh gi ngn mch short-circuit evaluation. V d ny xem xt hai gi tr Bool v ch cho php truy cp nu c hai gi tr l true:

    14.Logical OR Operator(Ton t Logic OR) Ton t logic OR (a || b) l mt ton t c vit bi hai du gch lin k. Bn s dng n to ra cc biu thc logic trong ch c mt trong hai gi tr l true th nhng kt qu cng chung l true. Ging nh ton t logic AND, ton t logic OR s dng nh gi ngn mch xem xt biu thc ca n. Nu pha bn tri ca mt biu thc logic OR l true, bn phi khng c nh gi, bi v n khng th thay i kt qu ca biu thc tng th.

    III.Kiu String and Kiu Character Mt chui l mt tp hp c sp xp ca nhng k t, nh l hello world hay albatross.Chui trong Swift biu din bng kiu String, chng ln lt biu din mt tp hp cc gi tr ca kiu k t (Character). Kiu String v Character ca Swift cung cp nhanh, cch ph hp vi m thng nht (Unicode) lm vic vi vn bn trong m code ca bn.C php to ra cc chui v thao tc nng n hn v d c hn, vi c php chui k t cng tng t nh C.Ni chui cng n gin nh cch cng hai chui vi nhau vi ton t +. v tnh bin i chui c qun l bng cch chn gia mt hng hoc mt bin, ging nh bt k gi tr no khc trong Swift.

    //Ton t Logic AND

    let checkUsername = true let checkPassword = true if checkUsername && checkPassword{ print("ng nhp thnh cng") }else{

    print("ng nhp tht bi") } //Kt qu: "ng nhp thnh cng"

    //Ton t Logic OR

    let checkUsername = true let checkPassword = false if checkUsername || checkPassword{ print("ng nhp thnh cng") }else{

    print("ng nhp tht bi") } //Kt qu: "ng nhp thnh cng"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 18 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Vi c php n gin, kiu String ca Swift rt nhanh trong vic thc hin cc thao tc vi chui.Mi chui bao gm cc k t Unicode m ha c lp, v cung cp h tr cho vic truy cp cc k t i din trong m Unicode khc nhau. Bn cng c th s dng chui chn hng, bin, ch, v cc biu thc thnh chui di, trong mt qu trnh c gi l suy chui. iu ny lm cho n d dng to ra cc gi tr chui ty chnh hin th, lu tr v in n.

    A.String Literal(Chui k t) Chui k t l mt chui c nh ca vn bn bao quanh bi mt cp du ngoc kp()

    B.Khi to chui Cch kim tra chui rng:

    C.String Mutability(Bin i chui) Bn c th thay i chui cho mt bin c kiu String bng cch gn vo cho bin mt gi tr kiu String.

    D.Character L mt k t trong mt chui.

    //Chui k t let chuoiString = "KhoaPham.Vn"

    //Chui rng

    let chuoirong = "" //kt qu: ""

    let chuoirong2 = String() //kt qu: ""

    //Kim tra chui rng

    if chuoirong.isEmpty{

    print("y l chui rng") } //Kt qu: "y l chui rng"

    //Thay i chui var bienchuoi = "Khoa" bienchuoi += "Pham.Vn" var bienchuoi2 = "Trung Tm Tin Hc" bienchuoi2 = "KhoaPham.Vn"

    //Character for character in "KhoaPham".characters{ print(character) } //Kt qu: K h o a P h a m

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 19 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    E.Interpolation(ni suy chui) L mt cch xy dng chui String mi t hn hp cc hng, bin,..

    F.Counting Character ly s lng gi tr trong mt chui hm sau:

    so snh 2 chui vi nhau, ta dng ton t bng(==), ton t khng bng(!=)

    IV.Collection Type Swift cung cp cho chng ta 3 kiu Collection l : Array, Set, Dictionary

    - Array lu tr s th t ca cc gi tr c cng kiu. - Set th t cc gi tr duy nht. - Dictionary lu tr cc gi tr cng kiu c th t, truy xut thng qua mt nh

    danh duy nht.

    //Ni suy chui let chuoi = "KhoaPham" let tuoi = 28

    let thongtin = "Tn: \(chuoi), tui: \(tuoi)"

    //Kt qu: "Tn: KhoaPham, tui: 28"

    //Counting Character var ten = "KhoaPham.Vn v WePro.Vn" print("S Lng: \(ten.characters.count)")

    //So Snh let chuoi1 = "KhoaPham" let chuoi2 = "KhoaPham" if chuoi1 == chuoi2{

    print("Hai chui ging nhau")

    } //Kt qu: "Hai chui ging nhau"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 20 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    A.Array(mng) Lu tr cc gi tr cng kiu theo mt danh sch c th t. Cc gi tr c th truy xut theo v tr trong Array.

    Cc thao tc c bn trong Array:

    //Array //Cch 1: var mang:[Int] = [1, 2, 3] //Cch 2: var mang2 = [Int]() mang2.append(1) mang2.append(2) mang2.append(3)

    //Cch thm phn t cho mang

    mang.append(4)

    //Kt qu: [1,2,3,4]

    //Ly gi tr

    print("S: \(mang[1])")

    //Kt qu: "S: 2"

    //Xo v tr phn t trong mang

    mang.removeAtIndex(2) //V tr 2 l s 3 print(mang)

    //Kt qu: [1,2,4]

    //Thm mt phn t vo mang ti v tr nht nh mang.insert(5, atIndex: 2) //Kt qu: [1,2,5,4]

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 21 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    1.Iterating Over an Array(Duyt qua mt mng)

    Nu bn mun ly gi tr v v tr ca phn t th bn c th nh sau:

    B.Set Set l mt kiu Collection mi c trong Swift 2.0. Set lu tr nhng gi tr khc nhau c cng kiu nhng khng c th t r rng.Bn c th s dng thay th Array khi th t ca cc gi tr l khng quan trng, hoc khi bn mun cc gi tr ch xut hin mt ln. 1.Thao tc c bn

    //Duyt qua mt mang for phantu in mang{ print(phantu) }

    //Kt qu: 1

    //Kt qu: 2

    //Kt qu: 5

    //Kt qu: 4

    for (vitri, giatri) in mang.enumerate(){

    print("Phn t \(vitri + 1): \(giatri)")

    }

    // Phn t 1: 1

    // Phn t 2: 2

    // Phn t 3: 5

    // Phn t 4: 4

    //khai bo v thm phn t

    //Cch 1: var set = Set() set.insert("Ch") set.insert("Mo") //Cch 2:

    var set2:Set = ["Cc", "Lan", "Hng", "Hu"]

    //m s phn t trong Set

    print("S Phn T: \(set2.count)")

    //Kt qu: "S Phn T: 4"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 22 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    trng hp xo phn t ta nn thm hm if kim tra xem gi tr c trong Set m ta xo khng:

    Set c mt hm ta c th kim tra xem phn t c trong Set hay khng:

    2.Performing Set Operations Bn c th s dng Set theo cc ton t c bn nh kt hp hai Set , xc nh nhng gi tr ging trong 2 Set...

    //Remove phn t

    if let xoa = set2.remove("Lan"){ print(" Xo: \(xoa)") }else{

    print("Khng C Phn T")

    } //Kt qu:" Xo: Lan"

    //Kim tra c phn t trong Set

    if set2.contains("Cc"){ print(" C") }else{ print("Cha C") } //Kt qu: " C"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 23 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    3.Set Membership and Equality

    let SoLe:Set = [1,3,5,7,9] let SoChan:Set = [0,2,4,6,8] let giatri:Set = [0,4,9]

    //Kt Hp 2 Set li vi nhau SoLe.union(SoChan).sort()

    //Kt qu: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    //Hp nhng phn t ging nhau SoLe.intersect(SoChan).sort()

    //Kt qu: []

    //Nhng phn t ring bit ca Set SoLe so vi Set giatri SoLe.subtract(giatri).sort()

    //Kt qu: [1,3,5,7]

    //Hp 2 Set li v b nhng phn t ging nhau SoLe.exclusiveOr(giatri).sort() //Kt qu: [0,1,3,4,5,7]

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 24 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Hnh trn cho ta thy c 3 Set a,b,c chng cho ln nhau. Set b nm trong set a v Set a giao nhau vi Set b ta s c nhng quan h sau:

    C.Dictionary Lu tr nhiu gi tr cng kiu, gi tr ca cc kiu ging nh Array nhng khng c th t nht nh. Mi gi tr c lin kt thng qua mt key duy nht. Bn s dng mt t in khi bn cn tm ra gi tr da trn nhn dng ca chng, theo cch ging nh mt t in thc t c s dng tm nh ngha cho mt t c th. Nhng thao tc c bn trong Dictionary:

    let a:Set = ["Hng", "Cc", "Hu", "Lan", "Hng Dng"] let b:Set = ["Cc", "Hu", "Lan"] let c:Set = ["Hng", "Hng Dng", "Sen", "Sng"]

    //Kim tra b nm trong a b.isSubsetOf(a)

    //Kt qu: true

    //Kim tra a bao b

    a.isSupersetOf(b)

    //Kt qu: true

    //Kim tra b c giao vi c b.isDisjointWith(c) //Kt qu: true

    //Khai bo Dictionary //Cch 1: var dictionary = [Int: String]() dictionary[1] = "KhoaPham" //Cch 2: var dictionary2: [String: String] = ["True":"ng","False":"Sai","Do":"Lm","Why":"Ti sao"]

    //Ly phn t

    print(dictionary2["True"]!)

    //Kt qu: "ng"

    //m phn t trong Dictionary

    print("S phn t: \(dictionary2.count)")

    //Kt qu: "S phn t: 4"

    //Thm phn t

    dictionary2["Go"] = "i" print(dictionary2)

    //Kt qu: "[Go: i, False: Sai, True: ng, Do: Lm, Why: Ti sao]"

    //Xo phn t

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 25 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    V.Control Flow A.For-In Bn c th s dng vng lp duyt qua cc phn t, cc phn t trong mng, cc k t trong chui... Vng lp duyt t 0 n 3:

    for index in 0...3{ print("KhoaPham\(index)") }

    //Kt qu: KhoaPham0

    //Kt qu: KhoaPham1

    //Kt qu: KhoaPham2

    //Kt qu: KhoaPham3

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 26 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Vng lp duyt qua cc phn t trong mng:

    Vng lp duyt qua cc k t trong chui:

    //Duyt qua cc phn t trong mng let danhsachten = ["Ronaldo","Messi","Ronaldinho"] for ten in danhsachten{ print(ten) }

    //Kt qu: Ronaldo

    //Kt qu: Messi

    //Kt qu: Ronaldinho

    for kytu in "KhoaPham".characters{ print(kytu) }

    //Kt qu: K

    //Kt qu: h

    //Kt qu: o

    //Kt qu: a

    //Kt qu: P

    //Kt qu: h

    //Kt qu: a

    //Kt qu: m

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 27 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    B.While Loops 1.While

    2.Repeat-While

    Repeat-While l vng lp s hot ng khi iu kin While vn cn tho.

    3.If Cu lnh iu kin n gin. Khi iu kin ng n s thc hin mt tp lnh ny, khi iu kin sai s thc hin mt tp lnh khc.

    //While var so = 0 var ketqua = 6 while so < ketqua{ so = so + 1 print(so) }

    //Kt qu: 1

    //Kt qu: 2

    //Kt qu: 3

    //Kt qu: 4

    //Kt qu: 5

    //Kt qu: 6

    //Repeat-While var a = 0 repeat{ a = a + 1 print(a) } while a < 4

    //Kt qu: 1

    //Kt qu: 2

    //Kt qu: 3

    //Kt qu: 4

    //IF var x = 2 if x == 2{ print("x = 2") }else{ print("x != 2") } //Kt qu: "x = 2"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 28 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    4.Swich

    Mt lnh switch xem xt mt gi tr v so snh n vi mt s m hnh ph hp c th. Sau n thc hin mt khi m code thch hp, da trn m hnh u tin m s ph hp thnh cng. Mt lnh switch cung cp mt thay th cho lnh if hi p cho nhiu trng thi tim nng. Mi Swich gm nhiu Case.

    5.Where

    Mt switch case c th s dng where kim tra iu kin b sung.

    var y = 3 if y == 1{ print("y == 1") }else if y == 2{ print("y == 2") }else if y == 3{ print("y == 3") }else{ print("y > 3") } //Kt qu: "y == 3"

    var z = 3 switch z{ case 0: print("z = 0") case 1: print("z = 1") case 2: print("z = 2") case 3: print("z = 3") default: print("z > 3") } //Kt qu: "z = 3"

    let wh = (1,4) switch wh{ case let(x,y) where x == y: print("\(x) = \(y)") case let(x,y) where x > y: print("\(x) > \(y)") case let(x,y) where x < y: print("\(x) < \(y)") } //Kt qu: "1 < 4"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 29 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    C.Control Transfer Statements Gm : continue, break, fallthrough, return, throw. 1.Continue

    Cu lnh continue ni vi mt vng lp dng hnh ng n ang thc hin v bt u li ti im bt u ca vic duyt qua vng lp tip theo.

    2.Break Lnh break kt thc vic thc hin ca ton b lnh chuyn iu khin ngay lp tc. Lnh break c th c s dng bn trong lnh switch, hoc lnh lp khi bn mun chm dt vic thc hin ca lnh switch hoc lnh lp sm hn nu khng phi l trng hp.

    3.Fallthrough

    let chuoi = "say you do" var catchuoi = "" for kitu in chuoi.characters{ switch kitu{ case "a","o"," ": continue default: catchuoi.append(kitu) } } print(catchuoi) //Kt qu: "syyud"

    //Break let bre = 1 switch bre{ case 1: print("bre = 1") default: break }

    let soF = 5 var chuoiF = "" switch soF{ case 2, 5, 6, 7: chuoiF += "Ket Qua \(soF)" fallthrough default: chuoiF += " Chay" } print(chuoiF) //Kt qu: "Ket Qua 5 Chay"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 30 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    VI.Function Hm(function) l khi m khp kn dng thc hin mt tc v c th. Bn cho mt tn hm xc nh nhng g n lm, v tn ny c s dng gi hm thc hin tc v khi cn thit. C php hm thng nht ca Swift l linh hot th hin bt c iu g t mt hm C-style n gin khng c tn tham s n mt phng thc Objective-C-style phc tp vi cc tn tham s hm a phng v bn ngoi cho mi tham s. Cc thng s c th cung cp cc gi tr mc nh n gin ha cc cuc gi chc nng v c th c thng qua nh tham s in-out, m sa i mt bin c khi hm hon tt vic thc hin. Mi hm trong Swift u c mt kiu, bao gm cc kiu tham s v kiu tr v ca hm. Bn c th s dng kiu ny ging nh bt k kiu no khc trong Swift, vic ny d dng truyn vo hm cng nh tham s cho cc hm khc, v tr v hm ny t hm khc. Hm ny cng c th c vit trong cc hm khc ng gi cc hm hu ch trong phm vi hm lng nhau.

    A.Defining and Calling Functions

    B.Function Parameters and Return Values

    C.Func khng c kiu tr v

    //Khai Bo func say()->String{ let name = "KhoaPham" return name } //Gi hm print(say()) //Kt qu: "KhoaPham"

    //func khng c kiu tr v

    func hello(){ let hel = "Hello, KhoaPham" } //Kt qu: "Hello, KhoaPham"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 31 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    D.Func c kiu tr v

    E.Func nhn tham s v c kiu tr v

    F.Func nhn nhiu tham s v c kiu tr v

    G.Func m k t trong chui

    //func c kiu tr v

    func hello2()->String{ let hel = "Hello, KhoaPham" return hel }

    //nhn kiu tr v var chuoi = hello2() print(chuoi) //Kt qu: "Hello, KhoaPham"

    //func nhn tham s kiu String v tr v 1 bin c kiu String func sayHello(chuoi:String) -> String{ let chuoi2 = "Hello, \(chuoi)" return chuoi2 } var string = sayHello("Lam") print(string) //Kt qu: "Hello, Lam"

    //func nhn nhiu tham s v tr v bin c kiu String func sayThongTin(chuoi:String, tuoi:Int) -> String{

    let chuoi1 = "Hello, \(chuoi) Tui: \(tuoi)"

    return chuoi1 } var string2 = sayThongTin("Lam", tuoi: 22) print(string2) //Kt qu: "Hello, Lam Tui 22"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 32 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    H.Func tr v nhiu gi tr

    I.Func nhiu tham s Variadic

    //func tr v nhiu gi tr func timMinMax(mang:[Int])->(min:Int,max:Int){ var valueMin = mang[0] var valueMax = mang[0] for value in mang[1.. valueMax{ valueMax = value } } return (valueMin,valueMax) } var MinMax = timMinMax([2,3,4,5,6,7,8,10]) print("Min:\(MinMax.min), Max:\(MinMax.max)") //Kt qu: "Min: 2, Max: 10"

    //func nhiu tham s Variadic

    func tinhTrungBinh(number:Double...) -> Double{ var tong:Double = 0 for so in number{ tong += so } return tong / Double(number.count) } var soDouble:Double = tinhTrungBinh(2,3,6,7,8)

    //Kt qu: 5.2

    //func m k t trong chui func demkitu(chuoi:String) ->Int{ return chuoi.characters.count } var so = demkitu("KhoaPham") //Kt qu: 8

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 33 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    J.Func InOut

    K.Bin bng Func

    VII.Closure Closures l nhng khi c lp cha cc chc nng c th c truyn qua v s dng trong m code ca bn. Closures trong Swift tng t nh blocks trong C v Object-C, v nh lambas trong mt s ngn ng lp trnh khc. Closures c th thu np v lu tr gi tr tham chiu n bt k hng s v bin no t nhng b cnh m chng c nh ngha. iu ny c gi l ng trn nhng hng s v bin, do tn closures. Swift x l tt c cng vic qun l b nh ca vic thu np cho bn. Hm ton cc v hm lng nhau, nh gii thiu trong Function, thc s l trng hp c bit ca closures. Closures ly mt trong ba hnh thc:

    - Hm ton cc l closures c mt tn v khng nm bt c bt k gi tr no c.

    - Hm lng nhau l closures c mt tn v c th nm bt cc gi tr t hm km theo ca chng.

    - Biu thc closure l closures khng r tn c vit theo c php nh m c th nm bt cc gi tr t bi cnh xung quanh.

    //func InOut func doiViTri(inout so1:Int, inout _ so2:Int){ let temporary = so1 so1 = so2 so2 = temporary } var a = 200 var b = 150 doiViTri(&a, &b) print("so a = \(a), b = \(b)") //Kt qu: a = 150, b = 200

    //Bin = func

    func tong2So(a:Int, b:Int) ->Int{ return a+b } func tich2So(a:Int, b:Int) ->Int{ return a*b } var PhepTong = tong2So

    print("Tong: \(PhepTong(3,b: 5))") //kt qu: 8

    PhepTong = tich2So print(PhepTong(3,b: 5)) //kt qu: 15

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 34 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Biu thc closure ca Swift c mt phong cch tri chy v r rng, vi vic ti u ha khuyn khch ngn gn, c php ln xn-min ph trong cc kch bn ph bin. Nhng ti u ha bao gm:

    - Suy lun cc tham s v gi tr tr v cc loi t bi cnh - Implicit returns from single-expression closures - Khai bo tn i s ngn gn - Trailing c php closure

    1.Closure Expressions Hm lng nhau, nh gii thiu Nested Functions, l thun tin trong vic t tn v nh ngha cc khi c lp ca m ngun nh l mt phn ca mt hm ln hn. Tuy nhin, i khi n l hu ch vit cc phin bn ngn hn ca cu trc ging nh hm khng c khai bo v tn y . iu ny c bit ng khi bn lm vic vi cc hm m phi t vo cc hm khc nh mt hoc nhiu i s ca chng. Biu thc Closure Closure expressions l mt cch vit ngn gn trc tip, tp trung vo c php. Biu thc Closure cung cp mt vi ti u ha c php cho vic vit closures di dng rt gn m khng mt s r rng hay mc ch. Cc v d biu closure di y minh ho nhng ti u ha bng cch chnh li mt v d duy nht ca hm c sp xp trn mt s ln lp, v d th hin chc nng tng t trong mt cch gn gng hn.

    2.Closure Expression Syntax

    C php biu thc closure c th s dng cc tham s hng, cc tham s bin, v tham s inout. Cc gi tr mc nh khng c cung cp. Cc tham s lnh bin thin c th khng c s dng nu bn t tn tham s lnh bin thin v t n cui cng trong danh sch tham s. Tuples c th c s dng nh l cc kiu

    let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"] func backwards(s1: String, s2: String) -> Bool { return s1 > s2 } var reversed = names.sort(backwards) //Closure reversed = names.sort({ (s1: String, s2: String) -> Bool in return s1 > s2 })

    //Kt qu: false

    //Kt qu: true

    //Kt qu: true

    //Kt qu: true

    //Kt qu: false

    //Kt qu: true

    //Kt qu: true

    //Kt qu: true

    //Kt qu: false

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 35 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    tham s v cc kiu tr v.

    VIII.Enumeration(Lit K) Mt lit k enumeration nh ngha mt kiu ph bin cho mt nhm cc gi tr lin quan v cho php bn lm vic vi cc gi tr trong mt cch an ton kiu trong m code ca bn. Nu bn quen thuc vi C, bn s bit rng C enumerations gn nhng tn c lin quan cho mt tp hp cc gi tr s nguyn. Lit k trong Swift linh hot hn nhiu, v khng cn phi cung cp mt gi tr cho tng phn t thuc lit k. Nu mt gi tr (c bit n nh mt gi tr th raw) c cung cp cho mi phn t, gi tr c th l mt chui, mt k t hoc mt gi tr ca bt k kiu s nguyn hoc kiu s phy ng. Ngoi ra, cc phn t lit k c th ch nh cc gi tr lin quan ca bt k kiu no c lu gi cng vi mi gi tr phn t khc, ging nh hp thc hoc bin thc trong cc ngn ng khc. Bn c th nh ngha mt tp hp chung ca cc phn t lin quan nh l mt phn ca mt enumeration, mi phn t trong s c mt b cc gi tr khc nhau ca cc kiu thch hp lin kt vi n. Lit k trong Swift l lp u tin theo ng ngha ca n. Chng p dng nhiu tnh nng truyn thng c h tr ch bi cc lp, chng hn nh cc thuc tnh tnh ton cung cp thm thng tin v gi tr hin ti ca lit k enumeration, v phng thc th hin instance - cung cp cc chc nng lin quan n cc gi tr lit k biu din. Enumerations cng c th nh ngha trnh khi to cung cp mt gi tr phn t ban u; c th c m rng m rng chc nng ca chng vt ra ngoi thc hin ban u ca chng; v c th ph hp vi cc giao thc cung cp chc nng tiu chun chc nng.

    1.Enumeration Syntax

    2.Matching Enumeration Values with a Switch Statement

    //khai bo enum //cch 1 enum testEnum{ case Trai case Phai case Tren case Duoi } //cch 2 enum testEnum2{ case Dong,Tay,Nam,Bac }

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 36 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Ta c th kt hp kiu enumeration vi Switch nh sau:

    IX.Classes and Structures Lp (class) v cu trc (structure) c to ra vi cng mc ch chung, nhng cu trc linh hot tr thnh cc khi xy dng ca m chng trnh ca bn. Bn nh ngha cc thuc tnh v phng thc thm chc nng cho cc lp v cu trc ca bn bng cch s dng chnh xc c php tng t nh i vi cc hng, bin, v cc hm. Khng ging nh cc ngn ng lp trnh khc, Swift khng yu cu bn phi to ra giao din c lp v cc tp tin thc hin cho cc lp v cu trc ty chnh. Trong Swift, bn nh ngha mt lp hoc mt cu trc trong mt tp tin duy nht, v cc giao din m rng lp hoc cu trc t ng lm sn cho cc m code khc s dng. 1.Comparing Classes and Structures

    Class v Structure trong Swift c nhiu im chung. C hai c th: - nh ngha cc thuc tnh(Property) lu tr cc gi tr. - nh ngha cc phng thc(Method) cung cp chc nng. - nh ngha subscripts cung cp quyn truy cp vo cc ga tr ca chng s dng c php subscript. - nh ngha b khi to thit lp trng thi ban u ca chng. - m rng trin khai chc nng ca chng ra bn ngoi thc thi mc nh. - Ph hp vi cc giao thc cung cp nhng chun chc nng ca mt kiu nht nh. Lp class c kh nng m rng, cu trc -structure th khng: - Tnh k tha cho php mt lp tha hng cc c tnh ca lp khc. - Type casting cho php bn kim tra v gii thch kiu ca mt th hin lp trong thi gian chy. - Deinitializers cho php th hin ca mt lp gii phng bt k m ngun no m n c gn.

    var timduong = testEnum.Phai switch timduong{ case .Trai: print("Bn Tri") case .Phai:

    print("Bn Phi")

    case .Tren:

    print(" Trn")

    case .Duoi:

    print(" Di") //Kt qu: "Bn Phi"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 37 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    - Reference counting cho php nhiu hn mt tham chiu n mt th hin lp.

    V d: Struct v Class:

    B.Class and Structure Instances Bn c th nhn cc gi tr trong class v struct:

    Thay i gi tr trong Class v Struct:

    //Khai Bo class AClass{ } struct AStruct { }

    struct AStruct { var a = 0 var b = 3 } class AClass{ var BStruct = AStruct() var kieuBool = true var a = 0.3 var chuoi:String? }

    //Ly gi tr trong Class v Struct var BStruct = AStruct() var BClass = AClass()

    print("Ly gi tr b: \(BStruct.b)")

    print("Ly gi tr a: \(BClass.a)")

    //Kt qu: "Ly gi tr b: 3" //Kt qu: "Ly gi tr a: 0.3"

    //Thay i gi tr BStruct.a = 5 BStruct.b = 10 print("Gi tr a: \(BStruct.a) v b: \(BStruct.b)") //Kt qu: "Gi tr a: 5 v b: 10"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 38 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    X.Subscript Lp (class) , cu trc (structure) , v kiu lit k (enumaration) c th nh ngha subscript, l cc phm tt truy cp vo cc phn t ca mt tp hp, danh sch, hoc chui. Bn s dng subscripts thit lp v ly gi tr ca index m khng cn phng thc ring bit cho thit lp v phc hi.

    A.Subscript Syntax Subscripts cho php bn truy vn cc th hin ca mt kiu bng cch vit mt hoc nhiu gi tr trong du ngoc vung sau tn th hin. C php ca chng tng t cho c c php phng thc th hin v c php thuc tnh tnh ton. Bn vit nh ngha subscript vi t kha subscript, v ch nh mt hoc nhiu tham s u vo v mt kiu tr v, trong cng mt cch nh cc phng thc th hin. Khng ging nh cc phng thc th hin, k hiu c th c c-ghi hay ch-c. Hnh vi ny c truyn t bi mt getter v setter trong cng mt cch nh i vi thuc tnh tnh ton:

    V d Subcript ch c:

    //Subscript c v ghi subscript(index: Int) -> Int{ get{ //Return gi tr thch hp } set(giatri){ //Thc hin nhng } }

    //subscript ch c subscript(index: Int)->Int{ //Return gi tr thch hp }

    //subscript ch c struct AStruct { let a:Int subscript(index: Int)-> Int{ return a * index } } let b = AStruct(a: 3) print("\(b[3])") //Kt qu: "9"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 39 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    XI.Inheritance(K Tha) Mt Class c th k tha (inherit) method, property, v cc c tnh khc t cc Class khc. Khi mt Class k tha t mt lp khc, Class k tha c gi l mt Class con (subclass), v Class c n k tha gi l Class cha (superclass) ca n. K tha l mt hnh vi c bn phn bit cc lp t cc kiu khc nhau trong Swift. Class trong Swift c th gi v truy cp cc method, property, v subscript thuc class cha ca chng v c th cung cp cc phin bn ghi ca bn thn chng vi nhng method, property, v subsript tinh chnh hay thay i hnh vi ca chng. Swift gip m bo vic ghi ca bn l chnh xc bng cch kim tra cc nh ngha ghi c mt nh ngha ph hp vi class cha. Class cng c th thm cc quan st thuc tnh vi cc thuc tnh k tha c thng bo khi gi tr ca mt thuc tnh thay i. Quan st thuc tnh c th c thm vo bt k thuc tnh no, cho d ban u n c nh ngha nh l mt thuc tnh lu tr hoc thuc tnh tnh ton.

    A.Defining a Base Class

    XII.Property Property l thuc tnh ca mt i tng.

    XIII.Method

    //K tha class AClass{ var a = 5 var name: String{

    return "KhoaPham.Vn, s: \(a)"

    } func tinh(){ } } let BClass = AClass() print("\(BClass.name)") //Kt qu: "KhoaPham.Vn, s: 5"

    class Nguoi { var ten:String = "" var tuoi:Int = 0 }

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 40 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Method l nhng function lin quan ti i tng .

    A.Subclass(lp con) Lp con (Subclassing) l hnh ng ca mt lp mi da trn mt lp hin c. Cc lp con tha hng nhng c tnh t lp hin c, sau bn c th tinh chnh. Bn cng c th thm cc c tnh mi cho cc lp con. ch ra rng mt lp con c mt lp cha, vit tn lp con trc tn lp cha, cch nhau bng du hai chm:

    V d:

    B.Overriding(ghi ) Bn c th ghi ln mt th hin hay thuc tnh lp tha k cung cp getter v

    class SomeSubclass: SomeSuperclass { // subclass definition goes here }

    //SubClass class CClass: AClass{ var b = 10 func tinh()-> Int { return a + b } } let getClass = CClass() print("\(getClass.tinh())") //Kt qu: "15"

    //Ghi class classOveride:CClass{ override var name: String{

    return super.name + ", WePro.Vn, s: \(b)"

    } } let over = classOveride() print("\(over.name)") //Kt qu: "KhoaPham.Vn, s: 5, WePro.Vn, s: 10"

    class Nguoi { var ten:String = "" var tuoi:Int = 0 func di(){ ... } func an(){ ... } func ngu(){ ... } }

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 41 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    setter ty chnh ca ring bn cho thuc tnh , hoc thm quan st thuc tnh cho php thuc tnh ghi quan st khi gi tr thuc tnh ngm thay i.

    C.Preventing Overrides(Ngn ghi ) Bn c th ngn chn mt phng thc, thuc tnh, hoc subscript b ghi bng cch nh du n nh l final cui cng. Lm iu ny bng cch vit cc sa i final trc t kho gii thiu ca phng thc, thuc tnh, hoc subscript (nh final var, final func, final class func, v final subscript). Bt k n lc ghi ln mt thc phng thc, thuc tnh, hoc subscript trong mt lp con c bo co nh l mt li bin dch thi gian. Phng thc, thuc tnh, hay subscript m bn thm vo mt lp trong mt phn m rng cng c th c nh du nh l cui cng trong nh ngha ca phn m rng. Bn c th nh du ton b mt lp nh l cui cng bng cch vit chnh sa final trc t kho class trong lp n nh ngha (final class). Bt k thc thi trn lp con, mt lp cui cng, c bo co nh l mt li thi gian bin dch.

    XIV.Initialization(Khi to) Init l bt buc khi to nhng thuc tnh ca i tng, khi i tng c khi to.

    v d trn khi khi to i tng nguoi1 th n bt buc ta phi truyn 2 tham s Ten v Tuoi v trong class Nguoi ta khi to hm init. Cn nguoi2 s bo li do ta cha truyn vo 2 tham s Ten v Tuoi.

    XV.Deinitialization(Hm Hu)

    class Nguoi { var ten:String = "" var tuoi:Int = 0 init(Ten:String, Tuoi:Int){ ten = Ten tuoi = Tuoi } } var nguoi2:Nguoi = Nguoi() //Missing argument for parameter 'Ten' in call var nguoi1:Nguoi = Nguoi(Ten: "Le Lam", Tuoi: 26)

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 42 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    Mt deinitializer c gi l ngay trc khi mt th hin lp c gii phng. Bn vit deinitializers vi t kha deinit, tng t nh cch b khi to intializers c vit vi t kha init. Deinitializers ch c sn trn cc kiu lp.

    XVI.Optional Chaining Optional Chaining l mt qu trnh truy vn v gi cc property, method, v subscript vo mt optional m hin ti c th l nil. Nu optional c cha mt gi tr,

    class Nguoi { var ten:String = "" var tuoi:Int = 0 init(Ten:String, Tuoi:Int){ ten = Ten tuoi = Tuoi } deinit{ print("Gi tr nil") } } var nguoi1:Nguoi = Nguoi(Ten: "Le Lam", Tuoi: 26) var nguoi2:Nguoi? = Nguoi(Ten: "KhoaPham", Tuoi: 28) //Nguoi2 c gi tr

    nguoi2 = nil // c gii phng v thc thi cc cu lnh trong deinit

    class Nguoi{ var Ten:String = "Lam" var Tuoi:Int = 26 } class Nha{ var nguoi:Nguoi? }

    //Gi gin tip let nha = Nha() if let nguoi = nha.nguoi?.Ten{ print("Tn: \(nguoi)") }else{ print("nguoi c gi tr nil") }

    //kt qu: "nguoi c gi tr nil"

    //Gi trc tip nha.nguoi = Nguoi() if let nguoi = nha.nguoi?.Ten{ print("Tn: \(nguoi)") }else{ print("nguoi khng c gi tr") } //kt qu: "Tn: Lam"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 43 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    thuc tnh, phng thc, hoc k hiu gi thnh cng; nu optional l nil, thuc tnh, phng thc, hoc k hiu gi tr v nil. Nhiu truy vn c th c ni li vi nhau, v ton b chui tht bi nu bt k lin kt trong chui l nil. Khi gi gin tip do nha.nguoi?.Ten ta khai bo c du ? nn gi tr l nil Cn khi gi trc tip nha.nguoi = Nguoi() lc ny c gi tr

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 44 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    XVII.Handling Error L qu trnh x l li v khc phc t cc li trong chng trnh. Swift cung cp first-class h tr vic ta xut li, bt li, tuyn truyn v khc phc li khi chy.

    A.Representing Errors Enumeration c bit thch hp m hnh ho mt nhm cc iu kin li, vi cc gi tr lin quan bit thm v bn cht ca mt li c truyn vo.

    B.Throwing Errors Ch ra functionn hoc method c th nm ra li.

    C.Catching and Handling Errors

    enum loiMaHoa:ErrorType{ case Empty case Short }

    func mahoaPassword(str:String, password:String) throws ->String{ guard password.characters.count > 0 else{throw loiMaHoa.Empty} guard password.characters.count >= 6 else{throw loiMaHoa.Short} let mahoa = password + str + password return String(mahoa.characters.sort()) }

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 45 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    y nu str = th s xut ra li Empty.

    do{ let chuoimahoa = try mahoaPassword("Lam", password: "123456") print(chuoimahoa) }catch loiMaHoa.Empty{ print("Bo Trong") }catch{ print("Loi Phat Sinh") }

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 46 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    XVIII.Tng hp nhng im khc trong Swift 2.0

    A.Defer

    B.Repeat-While

    C.Continue

    //defer func printABC(a:String, b:String, c:String){ print(a) defer{ print(b) } print(c) } printABC("A", b: "B", c: "C")

    //Kt Qu : A C B

    //Repeat-While var a = 0 repeat{ a = a + 1 print(a) } while a < 4

    //Kt qu: 1

    //Kt qu: 2

    //Kt qu: 3

    //Kt qu: 4

    let chuoi = "say you do" var catchuoi = "" for kitu in chuoi.characters{ switch kitu{ case "a","o"," ": continue default: catchuoi.append(kitu) } } print(catchuoi) //Kt qu: "syyud"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 47 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    D.Where

    E.Fallthrough

    F.Guard

    //where let wh = (1,4) switch wh{ case let(x,y) where x == y: print("\(x) = \(y)") case let(x,y) where x > y: print("\(x) > \(y)") case let(x,y) where x < y: print("\(x) < \(y)") } //Kt qu: "1 < 4"

    //Fallthrough let soF = 5 var chuoiF = "" switch soF{ case 2, 5, 6, 7: chuoiF += "Ket Qua \(soF)" fallthrough default: chuoiF += " Chay" } print(chuoiF) //Kt qu: "Ket Qua 5 Chay"

    guard a == b else{ print("Khc Nhau") return }

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 48 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    G.Set

    1.Khai Bo

    2.m Phn t

    3.Xo Phn t

    4.Kim tra phn t

    //Cch 1: var set = Set() set.insert("Ch") set.insert("Ch") //Cch 2: var set2:Set = ["Cc", "Lan", "Hng", "Hu"]

    //m s phn t trong Set

    print("S Phn T: \(set2.count)")

    //Kt qu: "S Phn T: 4" if let xoa = set2.remove("Lan"){ print(" Xo: \(xoa)") }else{

    print("Khng C Phn T")

    }

    //Kt qu:" Xo: Lan"

    if set2.contains("Cc"){ print(" C") }else{ print("Cha C") } //Kt qu: " C"

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 49 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    5.Ton t c bn

    6. Set Membership and Equality

    let SoChan:Set = [0,2,4,6,8] let giatri:Set = [0,4,9]

    //Kt Hp 2 Set li vi nhau SoLe.union(SoChan).sort()

    //Kt qu: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    //Hp nhng phn t ging nhau SoLe.intersect(SoChan).sort()

    //Kt qu: []

    //Nhng phn t ring bit ca Set SoLe so vi Set giatri SoLe.subtract(giatri).sort()

    //Kt qu: [1,3,5,7]

    //Hp 2 Set li v b nhng phn t ging nhau SoLe.exclusiveOr(giatri).sort() //Kt qu: [0,1,3,4,5,7]

    let b:Set = ["Cc", "Hu", "Lan"] let c:Set = ["Hng", "Hng Dng", "Sen", "Sng"]

    //Kim tra b nm trong a b.isSubsetOf(a) b.isSubsetOf(a)

    //Kim tra a bao b

    a.isSupersetOf(b)

    //Kt qu: true

    //Kim tra b c giao vi c b.isDisjointWith(c) //Kt qu: true

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 50 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

    H.Handling Error

    1.Enum

    2.Throws

    3.Do-Catch

    hc kho y v chuyn su hn bn c th tham gia kho hc lp trnh iOS ti trung tm o to tin hc KhoaPham. Kho hc iOS c bn: http://khoapham.vn/khoa-hoc-laptrinhios.html Kho hc iOS nng cao: http://khoapham.vn/lap-trinh-ios-nang-cao.html

    //Enum enum loiMaHoa:ErrorType{ case Empty case Short }

    //Func c th pht sinh li

    func mahoaPassword(str:String, password:String) throws ->String{ guard password.characters.count > 0 else{throw loiMaHoa.Empty} guard password.characters.count >= 6 else{throw loiMaHoa.Short} let mahoa = password + str + password return String(mahoa.characters.sort()) }

    //thc hin bt li do{ let chuoimahoa = try mahoaPassword("Lam", password: "123456") print(chuoimahoa) }catch loiMaHoa.Empty{ print("Bo Trong") }catch{ print("Loi Phat Sinh") }

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 51 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B

  • SWIFT 2.0 TRUNG TM O TO TIN HC KHOA PHM

    Page 52 of 52 KhoaPham.Vn | Hotline: 094 276 4080 Lu Hnh Ni B