Slide 1

Slide 1 text

SwiftUIΛ্खʹ࢖͏ Tatsuya Tanaka / ాத ୡ໵ TechFeed Experts Night #3 (#techfeed_experts_night)

Slide 2

Slide 2 text

ͨͳͨͭ / Tatsuya Tanaka • Ϡϑʔגࣜձࣾ / iOSΞϓϦࠇଳ • TechFeed Expert @tattn @tanakasan2525 @tattn

Slide 3

Slide 3 text

VTuberελΠϧͰWebձٞʹࢀՃͰ͖ΔΞϓϦެ։த

Slide 4

Slide 4 text

SwiftUIͷྑ͍࢖͍ํ

Slide 5

Slide 5 text

ηϚϯςΟοΫʹUIΛσβΠϯ͢Δ

Slide 6

Slide 6 text

struct NoSematicLayoutView: View { var body: some View { VStack { Image("Avatar") .resizable() .scaledToFit() Text("Hello, world") .font(.system(size: 28)) } .padding(16) .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button { // লུ } label: { Text("Done") .bold() } } ToolbarItem(placement: .navigationBarLeading) { Button("Cancel") { // লུ } } } } } ←ϑΥϯταΠζͷ۩ମతͳࢦఆ ←༨നαΠζͷ۩ମతͳࢦఆ ↑↓഑ஔͷ۩ମతͳࢦఆ

Slide 7

Slide 7 text

struct NoSematicLayoutView: View { var body: some View { VStack { Image("Avatar") .resizable() .scaledToFit() Text("Hello, world") .font(.system(size: 28)) } .padding(16) .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button { // লུ } label: { Text("Done") .bold() } } ToolbarItem(placement: .navigationBarLeading) { Button("Cancel") { // লུ } } } } } ←୺຤ͷจࣈαΠζΛେ͖ͯ͘͠΋൓ө͞Εͳ͘ͳΔ ͜ͷ഑ஔํ๏ͩͱwatchOSͰ͸࢖͑ͳ͍

Slide 8

Slide 8 text

struct SematicLayoutView: View { var body: some View { VStack { Image("Avatar") .resizable() .scaledToFit() Text("Hello, world") .font(.title) } .padding() .toolbar { ToolbarItem(placement: .confirmationAction) { Button("Done") { // লུ } } ToolbarItem(placement: .cancellationAction) { Button("Cancel") { // লུ } } } } } ←ελΠϧͰͷࢦఆ ←σϑΥϧτ஋Ͱͷࢦఆ ↑↓Ϙλϯͷಈ࡞Ͱͷࢦఆ

Slide 9

Slide 9 text

struct SematicLayoutView: View { var body: some View { VStack { Image("Avatar") .resizable() .scaledToFit() Text("Hello, world") .font(.title) } .padding() .toolbar { ToolbarItem(placement: .confirmationAction) { Button("Done") { // লུ } } ToolbarItem(placement: .cancellationAction) { Button("Cancel") { // লུ } } } } } ←ελΠϧͰͷࢦఆ ←σϑΥϧτ஋Ͱͷࢦఆ ↑↓Ϙλϯͷಈ࡞Ͱͷࢦఆ WatchΞϓϦͱͯ͠΋ϏϧυͰ͖Δ

Slide 10

Slide 10 text

ηϚϯςΟοΫʹUIΛσβΠϯ͢Δ σβΠϯπʔϧͰࣗ༝ʹσβΠϯͨ͠΋ͷΛ 
 ͦͷ··࣮૷ʹ൓ө͢Δํ਑͸SwiftUIͰ͸͓͢͢ΊͰ͖ͳ͍ SwiftUI͸ϓϥοτϑΥʔϜ΍؀ڥʹ߹Θͤͯ ࠷దͳݟͨ໨Λఏڙ͢Δ

Slide 11

Slide 11 text

΄΅ڞ௨ͷίʔυ͕ͩ؀ڥʹΑͬͯݟͨ໨͕มΘΔ ↑iOS ↑iPadOS watchOS→ ↑tvOS ↓macOS

Slide 12

Slide 12 text

SwiftUIʹదͨ͠UIͰ࡞Δͷ͕͓͢͢Ί ؀ڥʹ߹Θͤͨ࠷దԽΛҙࣝͨ͠APIͳͷͰɺ ϒϥϯυΠϝʔδ΍࣮ݱ͍ͨ͠UXΛ࢒ͭͭ͠ SwiftUIʹదԠͤ͞Δͷ͕͓͢͢Ί σβΠϯϨϏϡʔͳͲΛߦ͏৔߹ɺ SwiftUIͷਂ͍஌͕ࣝඞཁ

Slide 13

Slide 13 text

σβΠϯϨϏϡʔͷ೉͠͞ ɾSwiftUIͷΈͰ࣮ݱͰ͖Δͷ͔Ͳ͏͔ ɾUIKit౳ͱͷ࿈ܞͰ࣮ݱͰ͖Δͷ͔ ɹɾͦΕʹΑͬͯͲΕ͘Β͍޻਺͕૿͑Δ͔ ΍ͬͯΈͳ͍ͱΘ͔Βͳ͍͜ͱ΋ଟ͍ σβΠϯ֬ఆલʹXcode PreviewsΛ࢖ͬͯݕূ͢Δͷ͕େࣄ

Slide 14

Slide 14 text

ಠࣗͷUIΛ࠾༻͍ͨ͠৔߹ ※ಠࣗͷUI = SwiftUIͷίϯϙʔωϯτʹͳ͍΋ͷ

Slide 15

Slide 15 text

ಠࣗUIΛ࡞ΔˠOSͷػೳʹࣗಈରԠ͞Εͳ͘ͳΔ SwiftUI͸༷ʑͳ؀ڥʹࣗಈͰରԠ͍ͯ͠Δ෼ɺ ಠࣗUIΛ࣮ݱ͢Δ৔߹ɺͦΕΒʹରԠ͢Δ͔ͷ൑அ͕ඞཁʹͳΔ ɾμʔΫϞʔυ ɾϚϧνϓϥοτϑΥʔϜ ɾԣը໘ ɾAccessibility ͳͲ

Slide 16

Slide 16 text

·ͱΊ

Slide 17

Slide 17 text

·ͱΊ ɾηϚϯςΟοΫͳUIσβΠϯ͕େ੾ ɾಠࣗUIΛ࠾༻͢Δͱ༷ʑͳOSͷศརػೳͷαϙʔτ΋ඞཁʹͳΔ ɾiOS 14Ҏ߱ͳΒSwiftUI͸े෼࢖͑Δ ՝୊͸͋Δ͚Ͳɺ্खʹ࢖͏ͱ։ൃ଎౓͕Ұؾʹ޲্ʂ ΨϯΨϯ࢖ͬͯ஌ݟΛͨΊ͍͖ͯ·͠ΐ͏ʂ