Slide 1

Slide 1 text

੹຿ൣғΛҙࣝ͢Δͱ͍͏͓࿩ for Զίϯ7PM%BZ

Slide 2

Slide 2 text

override init() { super.init() emplyedBy = "YUMEMI Inc." job = "iOS Developer" twitter = "@lovee" qiita = "lovee" github = "el-hoshino" additionalInfo = "స৬͠·ͨ͠ʂ" class Speaker: Developer { } }

Slide 3

Slide 3 text

.PEFMɺ7JFXͱ$POUSPMMFS Λ࡞Ε͹੹຿͕෼͚ΒΕͨͬ ͯ͜ͱʹͳΔΜͰ͔͢ʁ

Slide 4

Slide 4 text

.PEFMɺ7JFXͱ$POUSPMMFSΛ࡞Ε͹੹຿ ͕෼͚ΒΕͨͬͯ͜ͱʹͳΔΜͰ͔͢ʁ ͦ͏ͱ͸ݶΒͳ͍ ͦ΋ͦ΋ʮ࡞ͬͨʯͱ ʮਖ਼͘͠࡞ͬͨʯ͸
 ผ֓೦

Slide 5

Slide 5 text

ຊ౰ʹ੹຿෼͚ΒΕͯΔͷ͔ʁ class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor(hue: 0.5, saturation: 1, brightness: 0.9, alpha: 1) } } $POUSPMMFS͕ϏδϡΞϧΛ ௚઀ઃఆ͍ͯ͠Δ!

Slide 6

Slide 6 text

ઃܭͱͦΕΒͷ੹຿ʢ௒ͬ͘͟Γʣ ‣ .7$ ‣ .PEFMɿϏδωεϩδοΫ ‣ 7JFXɿը໘ग़ྗ ‣ $POUSPMMFSɿϢʔβೖྗ ‣ .77. ‣ .PEFMɿϏδωεϩδοΫ ‣ 7JFXɿը໘ೖग़ྗ ‣ 7JFX.PEFMɿσʔλόΠϯσΟϯά ‣ FUD

Slide 7

Slide 7 text

ઃܭͱͦΕΒͷ੹຿ʢ௒ͬ͘͟Γʣ ‣ .7$ ‣ 7JFXɿը໘ग़ྗ ‣ .77. ‣ 7JFXɿը໘ೖग़ྗ ۩ମతͳϏδϡΞϧදݱ͸ 7JFXͷ໾ׂ

Slide 8

Slide 8 text

ຊ౰ʹ੹຿෼͚ΒΕͯΔͷ͔ʁ class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor(hue: 0.5, saturation: 1, brightness: 0.9, alpha: 1) } } $POUSPMMFS͕ϏδϡΞϧΛ ௚઀ઃఆ͍ͯ͠Δ!

Slide 9

Slide 9 text

ຊ౰͸͜͏͢΂͖͡Όͳ͍ͷ͔ʁ class ViewController: UIViewController { private lazy var _view = View() override func loadView() { self.view = _view } override func viewDidLoad() { super.viewDidLoad() _view.setupVisual() } } class View: UIView { func setupVisual() { self.backgroundColor = UIColor(hue: 0.5, saturation: 1, brightness: 0.9, alpha: 1) } } $POUSPMMFS͕ϏδϡΞϧΛ ௚઀ઃఆ͍ͯ͠ͳ͍" ϏδϡΞϧͷઃఆ͸શͯ
 Ϗϡʔʹू໿͞ΕΔ

Slide 10

Slide 10 text

੹຿Λҙࣝ͢Δͱݴ͏ͷ͸
 7JFX΍.PEFMͱͯ͠ͷ໾ׂΛ
 ҙࣝ͢Δ͜ͱ

Slide 11

Slide 11 text

੹຿Λҙࣝ͢Δͱݴ͏ͷ͸
 7JFX΍.PEFMͱͯ͠ͷ໾ׂΛ
 ҙࣝ͢Δ͜ͱ ͚ͩͰ͸ͳ͍

Slide 12

Slide 12 text

https://qiita.com/lovee/items/555a5b76097347aa2367

Slide 13

Slide 13 text

ंͷΨεܽ໰୊

Slide 14

Slide 14 text

ंͷΨεܽ໰୊ class Person { var car: Car? func buyCar(_ car: Car) { self.car = car car.owner = self } } class Car { let model: String var owner: Person? init(_ model: String) { self.model = model } } let maki = Person() let ferrari458Italia = Car("458Italia") maki.buyCar(ferrari458Italia)

Slide 15

Slide 15 text

ंͷΨεܽ໰୊ Ψεܽ څ༉͠ʹߦ͘ څ༉

Slide 16

Slide 16 text

ंͷΨεܽ໰୊ class Person { var car: Car? func buyCar(_ car: Car) { self.car = car car.owner = self } } class Car { let model: String var owner: Person? init(_ model: String) { self.model = model } func outOfGasoline() { // ??? } } let maki = Person() let ferrari458Italia = Car("458Italia") maki.buyCar(ferrari458Italia) maki.car?.outOfGasoline() // ???

Slide 17

Slide 17 text

ंͷΨεܽ໰୊ Ψεܽ څ༉͠ʹߦ͘ څ༉ - ࠷دΓͷΨιϦϯελϯυ͕Ͳ͜ʹ͋ͬͯͲ͏ߦ͔͘ʁ - څ༉ελοϑʹͲ͏఻͑Δ͔ʁ - ࢧ෷͍͸Ͳ͏͢Δ͔ʁ - FUD ͜ΕΒͷ໰୊͸
 ॴ༗ऀ͕ղܾ͢Δ
 ඞཁ͕͋Δʂ

Slide 18

Slide 18 text

ंͷΨεܽ໰୊ class Person { var car: Car? func buyCar(_ car: Car) { self.car = car car.owner = self } func buyGasoline() { print("Buy some gasoline!") } } class Car { let model: String var owner: Person? init(_ model: String) { self.model = model } func outOfGasoline() { self.owner?.buyGasoline() } } let maki = Person() let ferrari458Italia = Car("458Italia") maki.buyCar(ferrari458Italia) maki.car?.outOfGasoline() // Buy some gasoline!

Slide 19

Slide 19 text

ंͷΨεܽ໰୊ Ψεܽ ॴ༗ऀʹ
 څ༉ͤ͞Δ څ༉͠ʹߦ͘ څ༉ څ༉͕
 ऴΘΔ Ψεܽղܾ - શͯͷॲཧ͸ं͕ߦͳ͍ͬͯΔ - ॴ༗ऀ͸ंʹ৐ͬऔΒΕͯ͠·͏ - ͷͪͷ4LZOFU໰୊ʢେӕʣ ͜ΕΒͷ໰୊͸
 ͋͘·Ͱॴ༗ऀࣗ਎͕
 ղܾ͢΂͖ʂ

Slide 20

Slide 20 text

ंͷΨεܽ໰୊ class Person { var car: Car? func buyCar(_ car: Car) { self.car = car car.owner = self } func buyGasoline() { print("Buy some gasoline!") } } extension Person: CarOwner { func carDidRunOutOfGasoline(_ car: Car) { self.buyGasoline() } } protocol CarOwner: class { func carDidRunOutOfGasoline(_ car: Car) } class Car { let model: String weak var owner: CarOwner? init(_ model: String) { self.model = model } func outOfGasoline() { self.owner? .carDidRunOutOfGasoline(self) } } let maki = Person() let ferrari458Italia = Car("458Italia") maki.buyCar(ferrari458Italia) maki.car?.outOfGasoline() // Buy some gasoline!

Slide 21

Slide 21 text

ंͷΨεܽ໰୊ Ψεܽ ॴ༗ऀʹ
 ஌ΒͤΔ څ༉͠ʹߦ͘ څ༉ څ༉͕
 ऴΘΔ Ψεܽղܾ - શͯͷॲཧ͸ॴ༗ऀ͕ߦͳ͍ͬͯΔ - ॴ༗ऀ͸ंʹ৐ͬऔΒΕͯ͠·Θͳ͍ - ॴ༗ऀͷؾ࣋ͪͰങ͍׵͑Δ͜ͱ΋Մೳʂ

Slide 22

Slide 22 text

ंͷΨεܽ໰୊ Ψεܽ ॴ༗ऀʹ
 ஌ΒͤΔ σΟʔϥʔʹߦ͘ ങ͍׵͑Δ ৽͍͠ंΛೖख - શͯͷॲཧ͸ॴ༗ऀ͕ߦͳ͍ͬͯΔ - ॴ༗ऀ͸ंʹ৐ͬऔΒΕͯ͠·Θͳ͍ - ॴ༗ऀͷؾ࣋ͪͰങ͍׵͑Δ͜ͱ΋Մೳʂ

Slide 23

Slide 23 text

ंͷΨεܽ໰୊ class Person { var car: Car? func buyCar(_ car: Car) { self.car = car car.owner = self } func buyGasoline() { print("Buy some gasoline!") } } extension Person: CarOwner { func carDidRunOutOfGasoline(_ car: Car) { self.buyCar(Car("488GTB")) } } protocol CarOwner: class { func carDidRunOutOfGasoline(_ car: Car) } class Car { let model: String weak var owner: CarOwner? init(_ model: String) { self.model = model } func outOfGasoline() { self.owner? .carDidRunOutOfGasoline(self) } } let maki = Person() let ferrari458Italia = Car("458Italia") maki.buyCar(ferrari458Italia) maki.car?.outOfGasoline() // Buy Ferrari 488 GTB!

Slide 24

Slide 24 text

੹຿Λҙࣝ͢Δͱݴ͏ͷ͸
 ෦඼ͷॴ༗ؔ܎ʢ֊૚ؔ܎ʣΛ
 ҙࣝ͢Δ͜ͱͰ΋͋Δ

Slide 25

Slide 25 text

ंͷΨεܽ໰୊ class Person { var car: Car? func buyCar(_ car: Car) { self.car = car car.owner = self } func buyGasoline() { print("Buy some gasoline!") } } extension Person: CarOwner { func carDidRunOutOfGasoline(_ car: Car) { self.buyCar(Car("488GTB")) } } protocol CarOwner: class { func carDidRunOutOfGasoline(_ car: Car) } class Car { let model: String weak var owner: CarOwner? init(_ model: String) { self.model = model } func outOfGasoline() { self.owner? .carDidRunOutOfGasoline(self) } } let maki = Person() let ferrari458Italia = Car("458Italia") maki.buyCar(ferrari458Italia) maki.car?.outOfGasoline() // Buy Ferrari 488 GTB!

Slide 26

Slide 26 text

ඞཁ࠷খݶͷ͜ͱ͚ͩΛ஌Ζ͏ protocol CarOwner: class { func carDidRunOutOfGasoline(_ car: Car) } class Car { let model: String weak var owner: CarOwner? init(_ model: String) { self.model = model } func outOfGasoline() { self.owner? .carDidRunOutOfGasoline(self) } } - ं͕Φʔφʔͷߦಈʹ੹೚Λ࣋ͯ ͳ͍ʹ੹຿͕ͳ͍ - ͔ͩΒΦʔφʔΛॴ༗ͯ͠͸ ͍͚ͳ͍ - ͦΕͰΦʔφʔΛ௚઀ಈ͔͢ ͜ͱ΋Ͱ͖ͳ͍ - Ͱ΋$BS0XOFSͱͯ͠ಈ͚Δ ͜ͱ͸஌͍ͬͯΔ - ඞཁͳ࣌ʹΦʔφʔʹॲཧΛ ҠৡͰ͖Δ

Slide 27

Slide 27 text

ඞཁ࠷খݶͷ͜ͱ͚ͩΛ஌Ζ͏ protocol CarOwner: class { func carDidRunOutOfGasoline(_ car: Car) } class Car { let model: String weak var owner: CarOwner? init(_ model: String) { self.model = model } func outOfGasoline() { self.owner? .carDidRunOutOfGasoline(self) } } - ं͸ΦʔφʔΛॴ༗͍ͯ͠ͳ͍ - ΦʔφʔΛऑࢀর͠ͳ͚Ε͹ͳΒͳ͍ - ڧࢀর࢖͏͔ɺऑࢀর࢖͏͔ͷج४͸ɺ ͜ͷΦϒδΣΫτΛॴ༗͍ͯ͠Δ͔Ͳ͏͔ - ॴ༗ؔ܎͸Ұํ௨ߦͳͷͰɺ॥؀ࢀর ͷ໰୊΋ճආͰ͖Δ

Slide 28

Slide 28 text

ඞཁ࠷খݶͷ͜ͱ͚ͩΛ஌Ζ͏ protocol CarOwner: class { func carDidRunOutOfGasoline(_ car: Car) } class Car { let model: String weak var owner: CarOwner? init(_ model: String) { self.model = model } func outOfGasoline() { self.owner? .carDidRunOutOfGasoline(self) } } - ໋໊িಥͷճආ - ΋͔͢͠Δͱಉ໊͡લͷผͷϝιου͕ ͋Δ͔΋͠Εͳ͍ - Ҡৡݩ͸୭͔Λ൑ผͰ͖ΔΑ͏ʹ - Ҡৡઌ͕ಉ͡Ϋϥεͷෳ਺ΦϒδΣΫτ ࣋ͬͯΔ͔΋͠Εͳ͍

Slide 29

Slide 29 text

ඞཁ࠷খݶͷ͜ͱ͚ͩΛ஌Ζ͏ protocol CarOwner: class { func carDidRunOutOfGasoline(_ car: Car) } class Car { let model: String weak var owner: CarOwner? init(_ model: String) { self.model = model } func outOfGasoline() { self.owner? .carDidRunOutOfGasoline(self) } } - ࣗ෼ࣗ਎Λ๫࿐ͨ͘͠ͳ͍৔߹͸Ͳ͏͠Α͏# - ྫ͑͹Ҡৡઌ͸ࣗ෼ͷॴ༗ऀ͡Όͳ͍͔΋ ͠Εͳ͍৔߹ - యܕతͳύλʔϯ͸7JFXͷ%BUB4PVSDF - ͜͜Ͱ͸ंͷΨϨʔδΛྫʹ

Slide 30

Slide 30 text

ඞཁ࠷খݶͷ͜ͱ͚ͩΛ஌Ζ͏ protocol CarGarage: class { func carNeedsToPark(_ car: CarGarageUser) } protocol CarGarageUser: class { var garageUserModel: String { get } } class Car { let model: String weak var garage: CarGarage? // ... func parkToGarage() { self.garage?.carNeedsToPark(self) } } extension Car: CarGarageUser { var garageUserModel: String { return self.model } } ࣗ෼ࣗ਎Λ$BSͷ୅ΘΓʹ $BS(BSBHF6TFSͱͯ͠๫࿐ $BS(BSBHF͕ඞཁͦ͏ͳ΋ͷ͚ͩΛ $BS(BSBHF6TFSͱͯ͠ఏڙ

Slide 31

Slide 31 text

੹຿Λҙࣝ͢Δͱݴ͏ͷ͸
 ඞཁ࠷খݶͷ৘ใΛ஌Γͳ͕Β
 ඞཁ࠷খݶͷ৘ใΛ๫࿐͢ΔͷΛ
 ҙࣝ͢Δ͜ͱͰ΋͋Δ

Slide 32

Slide 32 text

·ͱΊ ‣ ੹຿ൣғΛҙࣝ͠Α͏ ‣ ෦඼ʢ7JFX΍.PEFMʣͱͯ͠ͷ໾ׂΛҙࣝ͠Α͏ ‣ ෦඼ͷॴ༗ؔ܎ʢ֊૚ؔ܎ʣΛҙࣝ͠Α͏ ‣ ඞཁ࠷খݶͷ৘ใͷอ࣋ͱ΍ΓऔΓΛҙࣝ͠Α͏

Slide 33

Slide 33 text

੹຿ൣғΛҙࣝͯ͠
 ࢓༷มߋʹڧ͍։ൃΛ
 "