Slide 1

Slide 1 text

MB[ZTUPSFEQSPQFSUZ @yashigani ؔ੢ϞόΠϧΞϓϦݚڀձ#4

Slide 2

Slide 2 text

yashigani id:yashigani_w @yashigani Mobile Application Engineer http://yashigani.hatenablog.com Hatena

Slide 3

Slide 3 text

https://flic.kr/p/4L3Fz5 What is lazy stored property?

Slide 4

Slide 4 text

• Swift has two types of properties • computed or stored • Indicate lazy stored property by lazy modifier • Lazy stored property created when it is first accessed

Slide 5

Slide 5 text

class Lazy { lazy var person: String = { println("lazy evaluation!") return "someone" }() } let l = Lazy() let person = l.person // => lazy evaluation! println(person) // => someone

Slide 6

Slide 6 text

ͳΜͷ໾ʹཱͭͷʁ

Slide 7

Slide 7 text

lazy property͕ศརͳͱ͜Ζ • ΠϯελϯεͷॳظԽ͕׬ྃͨ͠ޙʹ֎෦͔Β஫ೖ ͞ΕΔσʔλʹґଘͨ͠propertyʹରͯ͠ • ॳظԽʹίετ͕͔͔Δ͕ɼ࢖͏͔Θ͔Βͳ͍

Slide 8

Slide 8 text

class JSONDecoder { private var data: NSData private(set) lazy var JSONObject: [String: AnyObject] = { let data = self.data let JSONObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(dat a, options: .AllowFragments, error: nil) return JSONObject as? [String: AnyObject] ?? [:] }() init(data: NSData) { self.data = data } }

Slide 9

Slide 9 text

View ControllerͰେ׆༂ • storyboardͩͱ೚ҙͷΠχγϟϥΠβ͕࢖͑ͳ͍ • ΠχγϟϥΠβͰͳ͘prepareForSegueͰґଘ஫ೖ • Implicitly Unwrapped OptionalͳpropertyΛdidSet ͰॳظԽ͢ΔΑΓlazyʹͨ͠΄͏͕ศར • view͸஗Ԇϩʔυ͞ΕΔ

Slide 10

Slide 10 text

// ͜ΕΑΓ final class ViewController:
 UIViewController { var user: User! var client: APIClient! var userManager: UserManager! { didSet { user = userManager.loginUser client = APIClient(user.session) } } }

Slide 11

Slide 11 text

// ͬͪ͜ͷ΄͏͕͍͍ΑͶ final class ViewController:
 UIViewController { lazy var user: User = self.userManager.loginUser lazy var client: APIClient = APIClient(self.user.session) var userManager: UserManager! }

Slide 12

Slide 12 text

import MBProgressHUD // MBProgressHUDͱ͔͸͜͏͓ͯ͘͠ͱศར final class ViewController: UIViewController { lazy var : MBProgressHUD = { var HUD = MBProgressHUD(view: self.view) self.view.addSubview(HUD) return HUD }() }

Slide 13

Slide 13 text

ͭ·ΓMB[Z͸࠷ߴ

Slide 14

Slide 14 text

ߋʹਐΜͩઃܭ΁

Slide 15

Slide 15 text

class Lazy { var person: String = "someone" lazy var greeting: String = "Hello, lazy \(self.person)!" } let l = Lazy() l.person = "programmer" let person = l.person println(person) // => programmer println(l.greeting) // => Hello, lazy programmer

Slide 16

Slide 16 text

͜Ε͸ςετʹ࢖͑Δ • ΞϓϦέʔγϣϯ͕ґଘ͢ΔϦιʔεͳͲΛ Contextͱͯ͠·ͱΊΔ • Contextͷ΋ͭϦιʔεʹґଘ͢ΔpropertyΛ
 lazy stored propertyʹ͢Δ • ΞϓϦέʔγϣϯͰ͸ContextΛstaticʹऔಘ͢Δ ͕ɼςετͰ͸֎͔Βࠩ͠ସ͑

Slide 17

Slide 17 text

// Application Context public class Context { public static let staticContext = Context() public var path: String { return "data.txt" } } // A View Controller final public class ViewController: UIViewController { public var context = Context.staticContext lazy public var dataStore: String = self.context.path }

Slide 18

Slide 18 text

// test code func testViewController() { class MockContext: Context { override var path: String
 { return "test.txt" } } let vc = ViewController() // ॳظԽ͞ΕΔ·͑ʹcontextΛࠩ͠ସ͑Δ vc.context = MockContext() assert(vc.dataStore == "test.txt") }

Slide 19

Slide 19 text

• όέπϦϨʔʹͳΓ͕ͪͳґଘͷड͚౉͠Λ
 γϯϓϧͳ࣮૷΁ͱঢ՚ • γϯϓϧͳ࣮૷Ͱ͋Δͱͱ΋ʹςετՄೳੑΛߴ͘ อͭ

Slide 20

Slide 20 text

·ͱΊ

Slide 21

Slide 21 text

• lazy stored property͸ඞཁʹͳͬͨΒॳظԽ͞ΕΔ • جຊతʹ͍͍͔Μ͡ʹಈ͚͘Ͳɼςετ΋͠΍͍͢ Έ͍ͨͳͷΛ࡞ΕΔ • lazy࠷ߴʂ͍ͪ͹Μ޷͖ͳम০Ͱ͢

Slide 22

Slide 22 text

5PCF
 BMB[ZQSPHSBNNFS

Slide 23

Slide 23 text

͋Γ͕ͱ͏͍͟͝·ͨ͠