Slide 1

Slide 1 text

Swift ͷ struct ͷ stored property ͸ var ʹ͠Α͏ omochimetaru @

Slide 2

Slide 2 text

ࣗݾ঺հ • ID: omochimetaru @ Qoncept, Inc • Swift, Kotlin, C++, TypeScript, C#, Ruby, Python • http://qiita.com/omochimetaru • Android։ൃΛड஫͔ͨ͠ΒKotlinΛΨοπϦ... • null҆શΛޡղ͍ͯ͠Δਓୡ΁ͷϝοηʔδ • SwiftͷδΣωϦοΫͳϓϩτίϧͷม਺͸...

Slide 3

Slide 3 text

໎͍ͬͯ·ͤΜ͔ʁ struct SVCat { var name: String var age: Int } struct SLCat { let name: String let age: Int }

Slide 4

Slide 4 text

େৎ෉͔ͩΒ var ʹͯ͠ʂ

Slide 5

Slide 5 text

> Immutable ͳઃܭ͸ྑ͍͜ͱ ͔ͩΒɺlet ʹͨ͠ํ͕ྑ͍ʁ

Slide 6

Slide 6 text

Struct ͳΒ var Ͱ΋ immutable (ͱΈͳͤΔ) ͔Β େৎ෉ʂ

Slide 7

Slide 7 text

Immutable ͷ֬ೝ • શ͕ͯletͷΫϥε • มߋ༻ͷϏϧμʔ

Slide 8

Slide 8 text

Immutable ͷ֬ೝ class CCat { init(name: String, age: Int) { self.name = name self.age = age } let name: String let age: Int } class MutableCCat { init(cat: CCat) { self.name = cat.name self.age = cat.age } var name: String var age: Int var cat: CCat { return CCat(name: name, age: age) } }

Slide 9

Slide 9 text

var࣋ͪstruct = immutable class + builder

Slide 10

Slide 10 text

Immutable Λײ͡Δ structBreeder.cat.name = "tama"

Slide 11

Slide 11 text

Immutable Λײ͡Δ structBreeder.cat.name = "tama" // ↑↓ var cat = structBreeder.cat cat.name = "tama" structBreeder.cat = cat

Slide 12

Slide 12 text

Immutable Λײ͡Δ structBreeder.cat.name = "tama" // ↑↓ var cat = structBreeder.cat cat.name = "tama" structBreeder.cat = cat // ↑↓ let cat = MutableCCat(cat: classBreeder.cat) cat.name = "tama" classBreeder.cat = cat.cat

Slide 13

Slide 13 text

> ಉ͡ΠϯελϯεΛ มߋ͍ͯ͠Δ͡Όͳ͍͔ʂ

Slide 14

Slide 14 text

ಉ͡ΠϯελϯεΛมߋͨ͠ͷ͔ɺ ৽͍͠Πϯελϯεʹ ࠩ͠ସ͑ͨͷ͔͸ɺ ڞ༗͞Ε͍ͯͳ͚Ε͹۠ผͰ͖ͳ͍ɻ

Slide 15

Slide 15 text

ڞ༗ͱmutability

Slide 16

Slide 16 text

mutableΫϥεΛڞ༗͢Δ͔Β ࠔͬͨ͜ͱʹͳΔ print(classBreeder1.cat.name) // cat1 is mike classBreeder2.cat = classBreeder1.cat classBreeder2.cat.name = "tama" print(classBreeder2.cat.name) // cat2 is tama print(classBreeder1.cat.name) // cat1 is tama ← ! • ଞͷڞ༗ऀ͔Βҙਤͤͣมߋ͕༩͑ΒΕΔ

Slide 17

Slide 17 text

struct͸ڞ༗Ͱ͖ͳ͍͔Βେৎ෉ print(structBreeder1.cat.name) // cat1 is mike structBreeder2.cat = structBreeder1.cat structBreeder2.cat.name = "tama" print(structBreeder2.cat.name) // cat2 is tama print(structBreeder1.cat.name) // cat1 is mike ← ! • ίϐʔʹΑ࣮ͬͯମ͕૿͑ΔͨΊৗʹઐ༗͢Δ

Slide 18

Slide 18 text

·ͱΊ • struct͸ڞ༗Ͱ͖ͳ͍ • ͔ͩΒ࣮ମͷมߋͱɺ৽͍࣮͠ମ΁ͷࠩ͠ସ͕͑౳Ձ • ͔ͩΒ var Ͱ΋ immutable class ͱ౳Ձ • var Ͱ΋҆શ͔ͩΒ var ʹ͓ͯ͜͠͏ɻ

Slide 19

Slide 19 text

ଓ͖ͷ࿩ • ࠙਌ձ • Discord (SlackΈ͍ͨͳ΍ͭ) ͷ iOS αʔόʔͰ • ؅ཧऀ: SwiftϨλʔͷ @_mono ͞Μ • ΞΫηε: ʮDiscord iOSʯͰݕࡧ