Slide 1

Slide 1 text

0CTFSWBUJPOͷ͋Ε͜Ε f o r ୈ ճ ) " , "5" T X J G U

Slide 2

Slide 2 text

} var employedBy = "YUMEMI Inc." var job = "iOS Tech Lead" var favoriteLanguage = "Swift" var twitter = "@lovee" var qiita = "lovee" var github = "el-hoshino" var additionalInfo = """ ৯தಟɺ෠Εͳ͍ʂ """ final class Me: Developable, Talkable {

Slide 3

Slide 3 text

88%$ָ͠Ί·͔ͨ͠ʁ

Slide 4

Slide 4 text

IUUQTTQFBLFSEFDLDPNNOBSVTFXXEDYJBOEJDBOKJBCBPHBPUJZBOKJCJBO

Slide 5

Slide 5 text

FUD 8JEHFU,JU 4XJGU6* 0CTFSWBUJPO WJTJPO04 3FBMJUZ$PNQPTFS1SP 4XJGU%BUB 4XJGUNBDSPT 3FBMJUZ,JU 6*,JU "DUJWJUZ,JU 7JTJPO,JU $PSF.PUJPO

Slide 6

Slide 6 text

FUD 8JEHFU,JU 4XJGU6* 0CTFSWBUJPO WJTJPO04 3FBMJUZ$PNQPTFS1SP 4XJGU%BUB 4XJGUNBDSPT 3FBMJUZ,JU 6*,JU "DUJWJUZ,JU 7JTJPO,JU $PSF.PUJPO

Slide 7

Slide 7 text

0CTFSWBUJPO w 4XJGU6*༻ͷ৽͍͠ϑϨʔϜϫʔΫ w σʔλมߋͷ௥੻͕͞ΒʹָʹͳΔ w ύϑΥʔϚϯε΋্͕ΔΒ͍͠

Slide 8

Slide 8 text

import Combine class ValuesManager: ObservableObject { @Published var values: [Int] = [] } struct ContentView: View { @StateObject private var manager = ValuesManager() var body: some View { List { ForEach(manager.values, id: \.self) { value in Text("\(value)") } Button { manager.values .append(Int.random(in: 0..<100)) } label: { Text("Add") } } .animation(.default, value: manager.values) } }

Slide 9

Slide 9 text

import Observation @Observable class ValuesManager { var values: [Int] = [] } struct ContentView: View { @State private var manager = ValuesManager() var body: some View { List { ForEach(manager.values, id: \.self) { value in Text("\(value)") } Button { manager.values .append(Int.random(in: 0..<100)) } label: { Text("Add") } } .animation(.default, value: manager.values) } } !0CTFSWBCMFΛ σʔλϞσϧ࣮૷ʹ௥Ճ͢Δ σʔλϞσϧΛ ௨ৗͷσʔλͷΑ͏ʹ ϓϩύςΟʔએݴ͢Δ

Slide 10

Slide 10 text

struct ContentView: View { @State private var manager = ValuesManager() var body: some View { Child(manager: manager) } } struct Child: View { var manager: ValuesManager var body: some View { List { ForEach(manager.values, id: \.self) { value in Text("\(value)") } Button { manager.values.append(Int.random(in: 0..<100)) } label: { Text("Add") } } .animation(.default, value: manager.values) } } ࣗ਎ͷॴ༗͡Όͳ͚Ε͹!4UBUF΍ !0CTFSWFE0CKFDU΋ཁΒͳ͍

Slide 11

Slide 11 text

struct ContentView: View { @State private var manager = ValuesManager() var body: some View { List { ForEach($manager.values, id: \.self) { value in Cell(value: value) } Button { manager.values.append(Int.random(in: 0..<100)) } label: { Text("Add") } } .animation(.bouncy, value: manager.values) } } struct Cell: View { @Binding var value: Int var body: some View { Button { value += 1 } label: { Text("\(value)") } } } #JOEJOH͕ඞཁͳͱ͖͸ αΠϯΛೖΕΕ͹Ͱ͖Δ

Slide 12

Slide 12 text

͋Εʁ 0CTFSWBUJPOͬͯ͜Μͳʹ؆୯ʁ

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

0CTFSWBUJPOͱ $PNCJOFͷؔ܎

Slide 16

Slide 16 text

0CTFSWBUJPOͱ$PNCJOFͷؔ܎ 0CTFSWBUJPO $PNCJOF ࠓ೥ϦϦʔε ೥ϦϦʔε J04Ҏ߱ J04Ҏ߱ Φϒβʔόʔύλʔϯʹઐ೦ ϦΞΫςΟϒ෩ͷॲཧΛఏڙ

Slide 17

Slide 17 text

0CTFSWBUJPOͱ$PNCJOFͱ$PODVSSFODZͷؔ ܎ 0CTFSWBUJPO $PNCJOF ࠓ೥ϦϦʔε ೥ϦϦʔε J04Ҏ߱ J04Ҏ߱ Φϒβʔόʔ ύλʔϯʹઐ೦ ϦΞΫςΟϒ෩ॲཧΛ ఏڙ

Slide 18

Slide 18 text

0CTFSWBUJPOͱ$PNCJOFͱ$PODVSSFODZͷؔ ܎ 0CTFSWBUJPO $PNCJOF $PODVSSFODZ ࠓ೥ϦϦʔε ೥ϦϦʔε ೥ϦϦʔε J04Ҏ߱ J04Ҏ߱ J04Ҏ߱ Φϒβʔόʔ ύλʔϯʹઐ೦ ϦΞΫςΟϒ෩ॲཧΛ ఏڙ ඇಉظॲཧͷจ๏Λ ఏڙ

Slide 19

Slide 19 text

$PNCJOF͸΋͏ඞཁͳ͍ J04Ҏ߱ͷΈରԠͷ৔߹ ͋͘·Ͱචऀͷߟ͑Ͱ͢

Slide 20

Slide 20 text

$PNCJOF͸΋͏ඞཁͳ͍ w $PNCJOF͸ͦ΋ͦ΋ΦʔόʔΩϧ w 4XJGU6*͸4UBUF%SJWFOͳͷͰɺ0CTFSWFS1BUUFSO࣮͑͞ݱ Ͱ͖Ε͹े෼Ͱɺ3FBDUJWFʢ'31ʣ͸ඞਢͰ͸ͳ͍ w ඇಉظॲཧΛॻ͖͍͚ͨͩͳΒɺ$PODVSSFODZͷػೳͰे෼ͩ͠ Ή͠Ζॻ͖΍͍͢ w Ξοϓϧެࣜ΋$PNCJOF͔Β0CTFSWBUJPO΁ͷҠߦΛਪ঑͍͘͞ w ࠓ೥$PNCJOFͷηογϣϯ͸ԿҰͭͳ͍ w ϥΠϒϥϦʔͷมߋ΋ಛʹͳ͍ w 4XJGU6*ͷυΩϡϝϯτͰ$PNCJOFͷ0CTFSWBCMF0CKFDU͔Β 0CTFSWBUJPOͷ!0CTFSWBCMF΁ͷҠߦهࣄ͕௥Ճ J04Ҏ߱ͷΈରԠͷ৔߹ ͋͘·Ͱචऀͷߟ͑Ͱ͢

Slide 21

Slide 21 text

$PNCJOF͸΋͏ඞཁͳ͍ w $PNCJOF͸ͦ΋ͦ΋ΦʔόʔΩϧ w 4XJGU6*͸4UBUF%SJWFOͳͷͰɺ0CTFSWFS1BUUFSO࣮͑͞ݱ Ͱ͖Ε͹े෼Ͱɺ3FBDUJWFʢ'31ʣ͸ඞਢͰ͸ͳ͍ w ඇಉظॲཧΛॻ͖͍͚ͨͩͳΒɺ$PODVSSFODZͷػೳͰे෼ͩ͠ Ή͠Ζॻ͖΍͍͢ w Ξοϓϧެࣜ΋$PNCJOF͔Β0CTFSWBUJPO΁ͷҠߦΛਪ঑͍͘͞ w ࠓ೥$PNCJOFͷηογϣϯ͸ԿҰͭͳ͍ w ϥΠϒϥϦʔͷมߋ΋ಛʹͳ͍ w 4XJGU6*ͷυΩϡϝϯτͰ$PNCJOFͷ0CTFSWBCMF0CKFDU͔Β 0CTFSWBUJPOͷ!0CTFSWBCMF΁ͷҠߦهࣄ͕௥Ճ J04Ҏ߱ͷΈରԠͷ৔߹ ͋͘·Ͱචऀͷߟ͑Ͱ͢

Slide 22

Slide 22 text

$PNCJOF͸΋͏ඞཁͳ͍ w $PNCJOF͸ͦ΋ͦ΋ΦʔόʔΩϧ w 4XJGU6*͸4UBUF%SJWFOͳͷͰɺ0CTFSWFS1BUUFSO࣮͑͞ݱ Ͱ͖Ε͹े෼Ͱɺ3FBDUJWFʢ'31ʣ͸ඞਢͰ͸ͳ͍ w ඇಉظॲཧΛॻ͖͍͚ͨͩͳΒɺ$PODVSSFODZͷػೳͰे෼ͩ͠ Ή͠Ζॻ͖΍͍͢ w Ξοϓϧެࣜ΋$PNCJOF͔Β0CTFSWBUJPO΁ͷҠߦΛਪ঑͍͘͞ w ࠓ೥$PNCJOFͷηογϣϯ͸ԿҰͭͳ͍ w ϥΠϒϥϦʔͷมߋ΋ಛʹͳ͍ w 4XJGU6*ͷυΩϡϝϯτͰ$PNCJOFͷ0CTFSWBCMF0CKFDU͔Β 0CTFSWBUJPOͷ!0CTFSWBCMF΁ͷҠߦهࣄ͕௥Ճ J04Ҏ߱ͷΈରԠͷ৔߹ ͋͘·Ͱචऀͷߟ͑Ͱ͢

Slide 23

Slide 23 text

$PNCJOF͸΋͏ඞཁͳ͍ w $PNCJOF͸ͦ΋ͦ΋ΦʔόʔΩϧ w 4XJGU6*͸4UBUF%SJWFOͳͷͰɺ0CTFSWFS1BUUFSO࣮͑͞ݱ Ͱ͖Ε͹े෼Ͱɺ3FBDUJWFʢ'31ʣ͸ඞਢͰ͸ͳ͍ w ඇಉظॲཧΛॻ͖͍͚ͨͩͳΒɺ$PODVSSFODZͷػೳͰे෼ͩ͠ Ή͠Ζॻ͖΍͍͢ w Ξοϓϧެࣜ΋$PNCJOF͔Β0CTFSWBUJPO΁ͷҠߦΛਪ঑͍͘͞ w ࠓ೥$PNCJOFͷηογϣϯ͸ԿҰͭͳ͍ w ϥΠϒϥϦʔͷมߋ΋ಛʹͳ͍ w 4XJGU6*ͷυΩϡϝϯτͰ$PNCJOFͷ0CTFSWBCMF0CKFDU͔Β 0CTFSWBUJPOͷ!0CTFSWBCMF΁ͷҠߦهࣄ͕௥Ճ J04Ҏ߱ͷΈରԠͷ৔߹ ͋͘·Ͱචऀͷߟ͑Ͱ͢

Slide 24

Slide 24 text

0CTFSWBUJPOʹඋ͑Α

Slide 25

Slide 25 text

ࢀߟࢿྉ w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPCTFSWBUJPO w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOTXJGUVJNJHSBUJOH GSPNUIFPCTFSWBCMFPCKFDUQSPUPDPMUPUIFPCTFSWBCMFNBDSP