Slide 1

Slide 1 text

/4/PUJGJDBUJPOVTFS*OGPΛ
 4XJGUZʹѻ͓͏ QPUBUPUJQT CZ

Slide 2

Slide 2 text

!UBLBTFL w GSFFMBODFJ04&OHJOFFS w ג 'J/$ͷํ͔Βདྷ·ͨ͠ w ɹ!UBLBTFL w ɹUBLBTFL w ɹUBLBTFL

Slide 3

Slide 3 text

ಥવͰ͕͢ /4/PUJpDBUJPO ͩΔ͍Ͱ͢Ͷ

Slide 4

Slide 4 text

Α͋͘Δ࣮૷ // Model class User { … } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) })

Slide 5

Slide 5 text

Α͋͘Δ࣮૷ // Model class User { … } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) }) DMBTT6TFS͕͋Γ·ͯ͠ɺ

Slide 6

Slide 6 text

Α͋͘Δ࣮૷ // Model class User { … } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) }) "1*͔Β 6TFSΛऔಘͨ͠Βʜ

Slide 7

Slide 7 text

Α͋͘Δ࣮૷ // Model class User { … } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) }) %JDUJPOBSZʹแΜͰ /PUJpDBUJPOͷVTFS*OGPʹ LFZࢦఆͯ͠ೖΕͯʜ

Slide 8

Slide 8 text

Α͋͘Δ࣮૷ // Model class User { … } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) }) ͍ͦ͒

Slide 9

Slide 9 text

Α͋͘Δ࣮૷ // Model class User { … } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) }) 7JFXͰ /PUJpDBUJPOΛ ड͚ͨΒʜ

Slide 10

Slide 10 text

Α͋͘Δ࣮૷ // Model class User { … } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) }) VTFS*OGP͔Β LFZࢦఆͯ͠ 6TFSΛऔΓग़ͯ͠

Slide 11

Slide 11 text

Α͋͘Δ࣮૷ // Model class User { … } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) }) SFMPBE VTFS Ͱ 7JFXΛߋ৽͠·͢

Slide 12

Slide 12 text

/4/PUJpDBUJPOͷͩΔ͍ͱ͜ // Model class User { … } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) }) /4/PUJpDBUJPO$FOUFSͷ
 هड़͕৑௕ VTFS*OGPͷ%JDUJPOBSZ,FZʹ
 ΦϨΦϨ,FZΛ࢖Θ͟ΔΛಘͳ͍
 ɹϦςϥϧͰVTFSͱ͔ॻ͖ͨ͘ͳ͍ʜ

Slide 13

Slide 13 text

গ͠୤ઢ͠·͕͢ʜ 4XJGUͰ͸ ࢀরܕΑΓ஋ܕΛ࢖͓͏ͥʂ ͱΑ͘ݴΘΕ·͢

Slide 14

Slide 14 text

஋ܕͷ͍͍ͱ͜ جຊతʹJNNVUBCMFͰঢ়ଶΛ࣋ͨͳ͍ ࢀরΧ΢ϯτΛߟ͑Δඞཁ͕ͳ͍ ܧঝΛߟ͑ͳ͍͍ͯ͘ ڞ௨͢ΔৼΔ෣͍͸
 QSPUPDPMͰهड़͢Δ΄͏͕4XJGUZ

Slide 15

Slide 15 text

͡Ό͋ ͜ͷίʔυͷ6TFSDMBTT΋ ஋ܕʹ͠Α͏ T U S V D U

Slide 16

Slide 16 text

class User { let id: Int let name: String init(id: Int, name: String) { self.id = id self.name = name } }

Slide 17

Slide 17 text

struct User { let id: Int let name: String }

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Slide 20

Slide 20 text

public class NSNotification : NSObject, NSCopying, NSCoding { … public var userInfo: [NSObject : AnyObject]? { get } VTFS*OGP͸40CKFDU"OZ0CKFDU> ܕ "OZ0CKFDU͸DMBTT͔͠ड͚ೖΕͳ͍ ͭ·Γɺ
 TUSVDU΋FOVN΋
 /4/PUJpDBUJPOVTFS*OGPͷ
 த਎ͱͯ͠࢖͑ͳ͍

Slide 21

Slide 21 text

΍͸Γ
 6TFSͷTUSVDUԽ͸ ఘΊΔ͔͠ͳ͍ͷ͔ʜ

Slide 22

Slide 22 text

͍͍͑ɺఘΊͳ͍Ͱʜʂ ͋͞ɺTUSVDUΛ DMBTTͰϥοϓ͢ΔͷͰ͢ʜʂ

Slide 23

Slide 23 text

struct User { let id: Int let name: String } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": user]) } // error!! ˢ͜͜஫໨ʂ

Slide 24

Slide 24 text

struct User { let id: Int let name: String } class UserContainer { let user: User init(user: User) { self.user = user } } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": UserContainer(user: user)) } TUSVDU6TFSΛ DMBTT6TFS$POUBJOFSͰแΉ͜ͱͰ "OZ0CKFDUͱͯ͠ѻ͑ΔΑ͏ʹʂ

Slide 25

Slide 25 text

Α͠ ͜ΕͰ͍͚Δʂ

Slide 26

Slide 26 text

͍͚Δʜ͚Ͳ Πέͯͳ͍ʜ class UserContainer { let user: User init(user: User) { self.user = user } }

Slide 27

Slide 27 text

/4/PUJpDBUJPOͷͩΔ͍ͱ͜BHBJO /4/PUJpDBUJPO$FOUFSͷ
 هड़͕৑௕ VTFS*OGPͷ%JDUJPOBSZ,FZʹ
 ΦϨΦϨ,FZΛ࢖Θ͟ΔΛಘͳ͍ VTFS*OGPͷ7BMVFͱͯ͠
 "OZ$MBTT͔͠ೖΕΒΕͳ͍

Slide 28

Slide 28 text

ष͍΋ͷʹ͸֖Ͱ͢ʜʂ ͋͞ɺΠέͯͳ͍ॲཧ͸શ෦ ϥΠϒϥϦʹԡ͠ࠐΊΔͷͰ͢ʜʂ

Slide 29

Slide 29 text

/PUJGXJGUͰ
 /4/PUJGJDBUJPOVTFS*OGPΛ
 4XJGUZʹѻ͓͏

Slide 30

Slide 30 text

͜Ε͕ʜ // Model struct User { … } class PayloadContainer { let payload: Any init(payload: Any) { self.payload = payload } } API.fetchUser(id: id) { (user: User) in NSNotificationCenter.defaultCenter() .postNotificationName( "DidUserReceivedNotification", object: nil, userInfo: ["user": PayloadContainer(payload: user)) } // View NSNotificationCenter.defaultCenter().addObserverForName( "DidUserReceivedNotification", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { [weak self] (n: NSNotification) in guard let user = n.userInfo?["user"] as? User else { return } self?.reload(user) })

Slide 31

Slide 31 text

͜͏ͳΓ·͢ // Model struct User { … } API.fetchUser(id: id) { (user: User) in Notifwift.post("DidUserReceivedNotification", payload: user) } // View let notifwift = Notifwift() // property notifwift.observe("DidUserReceivedNotification") { [weak self] (payload: User) in self?.reload(payload) } QBZMPBEʹ͍ͨ͠ΠϯελϯεΛɺ ԿͰ͋Ζ͏ͱμΠϨΫτʹ౉ͤ·͢ɻ ड͚औΔ࣌΋؆୯ɾ҆શʂ ܕਪଌ͕ޮ͘ͷͰɺ QBZMPBEͷܕ͕6TFSͩͱ ࣮֬ʹอূͰ͖Δɻ ͞Βʹʜ

Slide 32

Slide 32 text

࠷ऴతʹ͸͜͏ͳΔ // Model struct User { … } API.fetchUser(id: id) { (user: User) in Notifwift.post("DidUserReceivedNotification", payload: user) } // View let notifwift = Notifwift() // property notifwift.observe("DidUserReceivedNotification", block: reload) 6TFS 7PJEܕͷؔ਺͔ͩΒɺ͜Ε͚ͩͰ0,

Slide 33

Slide 33 text

/PUJGXJGUΛಋೖ͢Δͱ
 ଞʹ΋͜Μͳ͍͍͜ͱ͕͋ΔΑʂ ஋͖ͭ&OVNͱͷ૬ੑ΋ൈ܈ /PUJGXJGUΠϯελϯε͕ࢮ͵ͱ
 ࣗಈతʹSFNPWF0CTFSWFSͯ͘͠Ε·͢ɻ
 Α͋͘ΔSFNPWF0CTFSWFS๨Ε΋
 ͜ΕͰ҆৺ʂ

Slide 34

Slide 34 text

ੋඇ࢖ͬͯΈ͍ͯͩ͘͞Ͷʂ IUUQTHJUIVCDPNUBLBTFL/PUJGXJGU ΋͠ ؾʹೖͬͨΒ (JU)VC 4UBS΋ ΑΖ͘͠Ͷʂ

Slide 35

Slide 35 text

/PUJGXJGUͰ
 /4/PUJGJDBUJPOVTFS*OGPΛ
 4XJGUZʹѻ͓͏ QPUBUPUJQT CZ ͓ΘΓ <13>