116 Views
November 12, 16
スライド概要
みんなで Swift 復習会 (http://cswift.connpass.com) の談笑で使った資料です。これを題材に2時間ばかり、集まったみんなと談笑しました。
※ Docswell での公開に移行する直前の Slideshare での閲覧数は 539 でした。
正統派趣味人プログラマー。プログラミングとは幼馴染です。
ΈΜͳͰ4XJGU෮शձ $POTUBOUT BOE7BSJBCMFT ΧδϡΞϧ4XJGUϓϩάϥϛϯά &;/&5۽୩༑ IUUQF[OFUKQ 4XJGU
5IF#BTJDT $POTUBOUTBOE7BSJBCMFT
ఆͱม
ఆͱม ໊લͷׂΓͯ ⾣ ԿΒ͔ͷʹ໊લΛׂΓͯΔͷʹ͏ ⾣ ໊લΛ͚ͭͯɺͦͷ໊લͰΛѻ͍ͬͯ͘ let p1 = 1299.00 let p2 = 649.00 let p3 = 399.00 let ps = [p1, p2, p3] let m = ps.max()
ఆͱม ໊લͷׂΓͯ ⾣ ໊લͰɺͦͷʹҙਤΛఴ͑ΒΕΔ ⾣ ཧղ͍͢͠ɺෆ۩߹Λ͍͘ʹ͜͠ىίʔυʹͳΔ let priceOfMacBook = 1299.00 let priceOfIPhone = 649.00 let priceOfAppleWatch = 399.00 let pricesOfProducts = [priceOfIPhone, priceOfMacBook, priceOfAppleWatch] let maxPriceOfProducts = pricesOfProducts.max()
̎छྨͷม
̎छྨͷม ෆมม DPOTUBOU ⾣ Λ͍ͬͨΜηοτͨ͠ΒมߋͰ͖ͳ͍ ⾣ MFUͰఆٛ͢Δ let maxCapacity = 100 maxCapacity = 20 DBOOPUBTTJHOUPWBMVFNBY$BQBDJUZJTBMFUDPOTUBOU
̎छྨͷม Մมม WBSJBCMF ⾣ Ληοτޙɺҧ͏ʹมߋͰ͖Δ ⾣ WBSͰఆٛ͢Δ var amount = 10 amount = 20
̎छྨͷม ίʔυͷಡΈํ let maxCapacity = 100 var amount = 10 ⾣ %FDMBSFBOFXDPOTUBOUDBMMFEANBY$BQBDJUZA BOEHJWFJUBWBMVFPG ⾣ 5IFO EFDMBSFBOFXWBSJBCMFDBMMFEABNPVOUA BOEHJWFJUBOJOJUJBMWBMVFPG
มͷ͍͚
มͷ͍͚ ৗࣝతͳબج४ ⾣ letʜ͕ܾ·Εมߋ͞Εͳ͍ͱ͖ ⾣ varʜԿ͔ͷɺ͕มߋ͞ΕΔͱ͖ struct Cup { let maxCapacity: Int = 100 var amount: Int = 10 mutating var add(amount: Int) {…} mutating var drop(amount: Int) {…} }
มͷ͍͚ ෆมมMFU ⾣ Λද͢ݱΔ ⾣ ܾΊͨΒʗܾ·ͬͨΒɺมԽ͠ͳ͍ // 引数として渡したい値は、決めたら変わらない let n = currentMonth - startMonth // 算出した結果は、決まったら変わらない let pairOfAnimals = fibonacci(n)
มͷ͍͚ ՄมมWBS ⾣ ঢ়ଶΛද͢ݱΔ ⾣ ঢ়گɾ࣌ؒʹԠͯ͡ɺมԽ͢Δ /// 動物を入れる籠 class Cage { // ケージの中の数は、状況に応じて変わる var numberOfAnimals: Int }
ه໌ܕఆٛ
ఆٛه໌ܕ มఆٛͷجຊ ⾣ ෆมมͳΒMFUͰఆٛ ⾣ ՄมมͳΒWBSͰఆٛ ⾣ มͷܕɺೖ͢Δʢӈลʣ͔Βྨਪʢܕਪʣ // 不変値変数なら let で定義 let pi = 3.14 Double 型 // 可変値変数なら var で定義 var attempts = 1 Int 型
ఆٛه໌ܕ ܕΛ໌͢هΔ ⾣ ม໊ͷʹޙɺͦͷܕΛ໌هՄೳ ⾣ ม͕ѻ͏ܕΛ໌֬ʢ࣮֬ʣʹࢦఆͰ͖Δ // 明記すれば、確実にその型として扱える let pi: Double = 3.14 Double 型 // 変数の型と値の型が異なれば、エラーで検出可能 let attempt: Int = 1.05 DBOOPUDPOWFSUWBMVFPGUZQF%PVCMF UPTQFDJpFEUZQF*OU
ه໌ܕ໓ଟʹΘͳ͍ ΄ͱΜͲͷ߹ɺॳظͰ͕ܕਪ͞ΕΔ
ఆٛه໌ܕ ίʔυͷಡΈํ let pi: Double = 3.14 ⾣ %FDMBSFBWBSJBCMFDBMMFEAQJA UIBUJTPGUZQF%PVCMF BOEHJWFJUBWBMVFPG ⾣ 5IFQISBTFlPGUZQF%PVCMFz NFBOTlDBOTUPSFBOZ%PVCMFWBMVFz
ఆٛه໌ܕ ڞมੑΛߟྀͨ͠ه໌ܕ ⾣ ͨͱ͑ɺੜΫϥεΛجఈΫϥεͰѻ͍͍ͨͱ͖ ⾣ ͨͱ͑ɺΛΦϓγϣφϧͰܕѻ͍͍ͨͱ͖ // UILabel を、その継承元の UIView として扱う let view: UIView = UILabel() UIView 型 // 整数値を Int? として扱う var value: Int? = 100 Int? 型
ఆٛه໌ܕ ϦςϥϧΛߟྀͨ͠ه໌ܕ ⾣ Ϧςϥϧɺ͞·͟·ͳʹܕೖͰ͖Δ ⾣ ܕΛ໌͢هΔ͜ͱͰɺతͷܕΛࢦఆՄೳ // 浮動小数点数リテラルを Float 型で扱う let pi: Float = 3.14 代入先が Float なので、Float として扱われる // 明記しなければ、リテラル毎に決められた既定の型 let pi = 3.14 浮動小数点数リテラルの既定の型は Double 型
ఆٛه໌ܕ ӈลͰͷه໌ܕ ⾣ ӈลͰܕΛ໌ͯ͠هɺมͷܕਪΛಋ͘ํ๏ ⾣ ϦςϥϧɺϒϦοδɺμϯΩϟετɺΦʔόʔϩʔυͰ׆༂ // 整数リテラルを Double 型として扱う let value = 100 as Double 右辺が Double 型なので、変数の型は Double 型と推論 // アップキャスト let view = NSTextField() as NSView // ブリッジ let string = NSString() as String
ԆॳظԽ
ԆॳظԽ ॳظɺͰޙઃఆՄೳ ⾣ มͷɺͷઃఆઌૹΓͰ͖Δ w ͕ه໌ܕඞਢʢ͔ΒͷܕਪͰ͖ͳ͍ͨΊʣ ⾣ ͏લ·Ͱʹɺͷઃఆ͕ඞཁ let maxAttempts: Int if retryingEnabled { maxAttempts = 10 } else { maxAttempts = 1 }
ಉ࣌ఆٛ
ಉ࣌ఆٛ ෳͷมΛಉ࣌ఆٛ ⾣ มͷछྨ͝ͱʹɺΧϯϚ۠ΓͰෳఆٛͰ͖Δ ⾣ ܕɺॳظͦΕͧΕʹઃఆͰ͖Δ // 初期値つきで定義(型は推論) let red = 0.5, green = 0.3, blue = 1.0 // 型指定つきで定義(遅延初期化) let red: Double, green: Double, blue: Double // 初期値をつけたり、型をつけたり、推論したり let red = 0.5, green: Double, blue: Double = 1.0
ಉ࣌ఆٛ มͷܕΛ·ͱΊͯఆٛ ⾣ ࠷͚ͩޙͷ໌ͰهɺͦΕҎલಉ͡ͳʹܕΔ ⾣ ్தͰܕΛมߋ͢Δ͜ͱՄೳ // 全て Double 型 let red, green, blue: Double // a だけ Int 型、b と c は Double 型 let a: Int, b, c: Double // 初期値によって型は影響を受ける(初期値優先) let a, b: Int, c = 5, d: Double // 初期値を指定した変数の前は、型明記が必要 let a, b = 5
ಉ࣌ఆٛ λϓϧʹΑΔಉ࣌ఆٛ ⾣ λϓϧͰಉ࣌ఆ͕ٛՄೳ ⾣ ܕΛ໌͢هΔͱ͖ɺλϓϧ୯ҐͰߦ͏ // 初期値つきで定義(型は推論) let (red, green, blue) = (0.5, 0.3, 1.0) // 型指定つきで定義(遅延初期化、同時初期化も可) let (red, green, blue): (Double, Double, Double) // よくあるタプルの使い方とは別な印象 let color: (red:Double, green:Double, blue:Double)
ϓϩύςΟʔͰͷఆٛ
ϓϩύςΟʔͰͷఆٛ มఆٛͱಉ༷ ⾣ ୯ମͰͷఆٛɺෳఆٛՄೳ ⾣ ܕॳظࢦఆՄೳ struct Color { var red: Int var green: Int var blue: Int }
ϓϩύςΟʔͰͷఆٛ ॳظΛࢦఆ͢Δ࣌ͷҙ ⾣ ΠχγϟϥΠβʔ࣮ߦલʹɺॳظ͕ઃఆ w ෳͷJOJUΛ࡞Δͱ͖ʹҙ w JOJUͰઃఆͯ͠lॳظԽ͖ॻ্ʹޙz ⾣ ߏମͰಛ༗ͷಈ͖ w .FNCFSXJTFJOJUɺॳظΛΘͳ͍
ΈΜͳͰ4XJGU෮शձ &OEJOH
&OKPZ4XJGU 5IBOLZPV ΈΜͳͰ4XJGU෮शձ $POTUBOUTBOE7BSJBCMFT &;/&5۽୩༑ IUUQF[OFUKQ ⾣ ఆͱม ⾣ มͷ͍͚ ⾣ ఆٛͱه໌ܕ ⾣ ԆॳظԽ