モバイルプログラミングの授業で使うスライドです
OPTIONAL TYPEMOBILE PROGRAMMING 19TH DEC
View Slide
OPTIONAL TYPE?
ςΩετOPTIONAL TYPE? ▸ Swiftʹසൟʹग़ͯ͘Δ ? ! ϚʔΫͷਖ਼ମ▸ Swift͚ͩͰͳ͘ϞμϯͳݴޠʹΑ͘ݟΒΕΔ nil (null) Λ҆શʹѻ͏ҝͷػೳ▸ ී௨ͷ͚ͩͰͳ͘ nil ೖΕΔ͜ͱ͕Ͱ͖ΔίϯςφͷΑ͏ͳͷ▸ ܕఆٛͷࡍʹඌʹ ? Λ͚ͭΔ͜ͱͰOptional Type ʹͳΔ▸ SwiftͰOptionalͱͯ͠ఆٛ͞ΕͨมͷΈnilΛೖ͢Δ͜ͱ͕Ͱ͖Δ▸ Optional TypeʹͳΔͱී௨ͷܕͱͯ͑͠ͳ͍ͷͰҰOptional͔ΒσʔλΛऔΓग़͢ඞཁ͕͋Δ
ςΩετ࣮ࡍͷίʔυ// มͷ߹var indexOrNil: Int? = 0// ͜ͷΑ͏ʹॻ͚Δvar optionalNum: Optional = 10// ؔͷ߹func getImage(named: String?) -> UIImage? {// লུ ...}// ͜ΕͰ͖ͳ͍print("added: \(optionalNum + 10)”)// ͳΜΒ͔ͷํ๏ͰOptional͔ΒΛऔΓग़͢ඞཁ͕͋Δ(ࠓճ!ϚʔΫ)print("added: \(optionalNum! + 10)”)
ͳΜΒ͔ͷํ๏ͬͯʁ
OPTIONAL UNWRAPʹ͍ͭͯ
ςΩετOPTIONAL UNWRAP? ▸ ίʔυͷྫͰݟͨΑ͏ʹOptional typeҰσʔλΛऔΓग़͔ͯ͠Β͏ඞཁ͕͋Δ▸ ͜ΕΛ unwrap(։ࣔ?) ͱݺͿ▸ unwrap͢Δํ๏͍͔ͭ͋͘ΔͷͰঢ়گʹΑ͍͚ͬͯΔ͜ͱ͕େࣄ
ํ๏1. FORCEDUNWRAP
ςΩετFORCED UNWRAP? ▸ ଟ͜Ε͕Ұ൪͓खܰͳํ๏▸ optionalͰఆٛ͞Εͨมͷඌʹ ! ϚʔΫΛ͚ͭΔ͚ͩ▸ ͕ͨͩ͋͠Δ͔nil͔Ͱ͋Δ͔ʹؔΘΒͣڧ੍తʹOptionalΛunwrapͯ͠͠·͏▸ ͦͷҝnilͩͬͨ߹ϓϩάϥϜ͕Ϋϥογϡ͢Δ▸ ͲΜͳͱ͖͕࣮֬ʹೖ͍ͬͯΔͱ͍͏͜ͱ(ઈରnilʹͳΒͳ͍ͱ͍͏ࣄ)͕อূͰ͖Δ߹ͷΈ͍·͠ΐ͏
ςΩετ࣮ࡍͷίʔυ// มͷ߹var nilNumber: Int? = nil// ͜ͷΑ͏ʹॻ͚Δvar optionalNum: Optional = 10//ม optionalNum ͷඌʹ!ϚʔΫΛ͚ͭͯΛऔΓग़͢print("added: \(optionalNum! + 10)”)//͜ΕΫϥογϡʂprint("added: \(nilNumber! + 10)”)
ํ๏2. NILCOALESCING OPERATOR
ςΩετNIL COALESCING OPERATOR? ▸ ͪ͜Βඇৗʹ͓खܰͳํ๏͔ͭ҆શ▸ optionalͰఆٛ͞ΕͨมͷޙΖʹ ?? Λ͚ͬͭ͘Δ▸ ?? ԋࢉࢠ͕͋ΕͦͷΛฦ͠ɺnilͰ͋Εࢦఆͨ͠defaultValueΛฦ͢▸ defaultValue ͑͞༻ҙͰ͖Ε҆શ͔͓ͭखܰʹ Unwrap Ͱ͖Δ▸ get or elseͱݺΕΔ͜ͱ͋Δ
ςΩετ࣮ࡍͷίʔυ// มͷ߹var nilNumber: Int? = nil// ͜ͷΑ͏ʹॻ͚Δvar optionalNum: Optional = 10// ม optionalNum ͷޙΖʹ ?? ϚʔΫΛ͚ͭͯΛऔΓग़͢// ม optionalNum ͕ nil ͩͬͨΒ 0 ʹͳΔprint("added: \((optionalNum ?? 0) + 10)”)
ํ๏3.OPTIONALBINDING
ςΩετOPTIONAL BINDING? ▸ ԋࢉࢠΛ͏ํ๏ʹൺΔͱίʔυྔ૿͑Δ͕ͱͯ҆શʹѻ͑Δ▸ if let guard let, switch Λͬͯ unwrap ͢Δํ๏▸ ͦΕͧΕܗҧ͏͕શͯ optional ͷதΛ৽͍͠ఆʹଋറ(bind)͢Δ͜ͱͰunwrap͢Δ▸ Ұ൪Α͘͏ํ๏͔
ςΩετ࣮ࡍͷίʔυ* ͘ͳΔͷͰXcodeͰ