Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lazy stored property

Lazy stored property

関モバ#4の発表資料です.
Lazy stored propertyについて話しました.

yashigani

July 27, 2015
Tweet

More Decks by yashigani

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. • 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

    View Slide

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

    View Slide

  6. ͳΜͷ໾ʹཱͭͷʁ

    View Slide

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

    View Slide

  8. 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
    }
    }

    View Slide

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

    View Slide

  10. // ͜ΕΑΓ
    final class ViewController:

    UIViewController {
    var user: User!
    var client: APIClient!
    var userManager: UserManager! {
    didSet {
    user = userManager.loginUser
    client =
    APIClient(user.session)
    }
    }
    }

    View Slide

  11. // ͬͪ͜ͷ΄͏͕͍͍ΑͶ
    final class ViewController:

    UIViewController {
    lazy var user: User =
    self.userManager.loginUser
    lazy var client: APIClient =
    APIClient(self.user.session)
    var userManager: UserManager!
    }

    View Slide

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

    View Slide

  13. ͭ·ΓMB[Z͸࠷ߴ

    View Slide

  14. ߋʹਐΜͩઃܭ΁

    View Slide

  15. 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

    View Slide

  16. ͜Ε͸ςετʹ࢖͑Δ
    • ΞϓϦέʔγϣϯ͕ґଘ͢ΔϦιʔεͳͲΛ
    Contextͱͯ͠·ͱΊΔ
    • Contextͷ΋ͭϦιʔεʹґଘ͢ΔpropertyΛ

    lazy stored propertyʹ͢Δ
    • ΞϓϦέʔγϣϯͰ͸ContextΛstaticʹऔಘ͢Δ
    ͕ɼςετͰ͸֎͔Βࠩ͠ସ͑

    View Slide

  17. // 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
    }

    View Slide

  18. // 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")
    }

    View Slide

  19. • όέπϦϨʔʹͳΓ͕ͪͳґଘͷड͚౉͠Λ

    γϯϓϧͳ࣮૷΁ͱঢ՚
    • γϯϓϧͳ࣮૷Ͱ͋Δͱͱ΋ʹςετՄೳੑΛߴ͘
    อͭ

    View Slide

  20. ·ͱΊ

    View Slide

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

    View Slide

  22. 5PCF

    BMB[ZQSPHSBNNFS

    View Slide

  23. ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide