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

iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜

kenmaz
January 29, 2016

 iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜

2016/01/29に開催された「DeNA TechCon 2016」での講演資料です。
https://techcon.dena.com

kenmaz

January 29, 2016
Tweet

More Decks by kenmaz

Other Decks in Programming

Transcript

  1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    J04ϨΨγʔίʔυվળΨΠυ
    1
    Jan 29, 2016
    দલ݈ଠ࿠
    IPϓϥοτϑΥʔϜࣄۀ෦ୈ̍෦

    DeNA Co., Ltd.
    ʙϚϯΨϘοΫε։ൃʹ͓͚Δࣄྫʙ

    View Slide

  2. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ࣗݾ঺հ
    দલ݈ଠ࿠ (id:kenmaz)
    2003.4 ೔ཱιϦϡʔγϣϯζ (چɾ೔ཱιϑτ΢ΣΞΤϯδχΞϦϯάʣ
    SIer, Java, Ruby, ଞ
    2009.6 υϫϯΰ
    χίχίɺଞ
    2013.4 DeNA
    ϚϯΨϘοΫε ϦʔυΤϯδχΞ
    2

    View Slide

  3. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    3

    View Slide

  4. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    4
    ϓϩ࡞Ոͷ  
    ඳ͖͓Ζ͠࡞඼͕  
    ຖ೔ߋ৽ɺແྉͰಡΊΔ  
    ϚϯΨࡶࢽΞϓϦ

    View Slide

  5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    5

    View Slide

  6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    6
    ిࢠॻ੶ετΞ
    ϚϯΨ౤ߘ

    View Slide

  7. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ຊ୊
    7

    View Slide

  8. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϨΨγʔίʔυʹ͍ͭͯ
    8

    View Slide

  9. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϚϯΨϘοΫεʹ͓͚ΔϨΨγʔίʔυ
    •։ൃελʔτ͔Β໿̏೥
    •iOS6࣌୅ͷίʔυଟ਺
    •ػೳ௥Ճʹ൐͏ίʔυͷෳࡶԽ
    •ϨΨγʔίʔυԽͷஹީ
    9

    View Slide

  10. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϚϯΨϘοΫεʹ͓͚ΔϨΨγʔίʔυ
    •։ൃελʔτ͔Β໿̏೥
    •iOS6࣌୅ͷίʔυଟ਺
    •ػೳ௥Ճʹ൐͏ίʔυͷෳࡶԽ
    •ϨΨγʔίʔυԽͷஹީ
    9
    iOSϨΨγʔίʔυվળΨΠυ
    ϨΨγʔίʔυԽͤ͞ͳ͍ͨΊͷऔΓ૊Έ

    View Slide

  11. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶃϦϦʔεαΠΫϧͷݟ௚͠
    ᶄSwift΁ͷҠߦ
    ᶅAutoLayout΁ͷରԠ
    ᶆઃܭ
    ᶇӡ༻ɾϩά
    10
    iOS ϨΨγʔίʔυվળΨΠυ

    View Slide

  12. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶃϦϦʔεαΠΫϧͷݟ௚͠
    ᶄSwift΁ͷҠߦ
    ᶅAutoLayout΁ͷରԠ
    ᶆઃܭ
    ᶇӡ༻ɾϩά
    10
    iOS ϨΨγʔίʔυվળΨΠυ
    ޙ೔webͰެ։Ͱ͖Ε͹ɾɾɾ

    View Slide

  13. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Swift΁ͷҠߦ
    11
    iOSϨΨγʔίʔυվળΨΠυ  ͦͷᶄ

    View Slide

  14. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    12
    h)ps://developer.apple.com/swi7/
    SwiftҠߦͷҙٛ

    View Slide

  15. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    12
    h)ps://developer.apple.com/swi7/
    SwiftҠߦͷҙٛ

    View Slide

  16. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    12
    h)ps://developer.apple.com/swi7/
    • Type  Safe  
    • Op• Immutable  
    • Generics
    SwiftҠߦͷҙٛ

    View Slide

  17. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    12
    h)ps://developer.apple.com/swi7/
    • Type  Safe  
    • Op• Immutable  
    • Generics
    SwiftҠߦͷҙٛ
    ݴޠͷ҆શੑʹΞϓϦͷ඼࣭ʹ௚݁

    View Slide

  18. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    iOSΤϯδχΞ
    1.5ਓ
    Ͳ͏͢Δ
    13

    View Slide

  19. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    SwiftҠߦ΁ͷجຊઓུ
    14

    View Slide

  20. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    SwiftҠߦ΁ͷجຊઓུ
    1. طଘίʔυͷڍಈΛഁյ͠ͳ͍͜ͱ
    14

    View Slide

  21. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    SwiftҠߦ΁ͷجຊઓུ
    1. طଘίʔυͷڍಈΛഁյ͠ͳ͍͜ͱ
    2. طଘobjcίʔυͷमਖ਼͸ۃྗSwiftͰߦ͏͜ͱ
    14

    View Slide

  22. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    SwiftҠߦ΁ͷجຊઓུ
    1. طଘίʔυͷڍಈΛഁյ͠ͳ͍͜ͱ
    2. طଘobjcίʔυͷमਖ਼͸ۃྗSwiftͰߦ͏͜ͱ
    3. ஈ֊తʹঃʑʹҠߦ͢͢ΊΔ͜ͱ
    14

    View Slide

  23. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    SwiftҠߦ΁ͷجຊઓུ
    1. طଘίʔυͷڍಈΛഁյ͠ͳ͍͜ͱ
    2. طଘobjcίʔυͷमਖ਼͸ۃྗSwiftͰߦ͏͜ͱ
    3. ஈ֊తʹঃʑʹҠߦ͢͢ΊΔ͜ͱ
    4. SwiftΒ͍͠ίʔυΛॻ͍࣮ͯ֬ʹ඼࣭ΛߴΊΔ͜ͱ
    14

    View Slide

  24. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    SwiftҠߦ΁ͷجຊઓུ
    1. طଘίʔυͷڍಈΛഁյ͠ͳ͍͜ͱ
    2. طଘobjcίʔυͷमਖ਼͸ۃྗSwiftͰߦ͏͜ͱ
    3. ஈ֊తʹঃʑʹҠߦ͢͢ΊΔ͜ͱ
    4. SwiftΒ͍͠ίʔυΛॻ͍࣮ͯ֬ʹ඼࣭ΛߴΊΔ͜ͱ
    5. ہॴతͳଥڠ͸ڐ༰
    14

    View Slide

  25. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    SwiftҠߦ΁ͷجຊઓུ
    1. طଘίʔυͷڍಈΛഁյ͠ͳ͍͜ͱ
    2. طଘobjcίʔυͷमਖ਼͸ۃྗSwiftͰߦ͏͜ͱ
    3. ஈ֊తʹঃʑʹҠߦ͢͢ΊΔ͜ͱ
    4. SwiftΒ͍͠ίʔυΛॻ͍࣮ͯ֬ʹ඼࣭ΛߴΊΔ͜ͱ
    5. ہॴతͳଥڠ͸ڐ༰
    14
    →Mix-and-Match

    View Slide

  26. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Mix and Match
    ͻͱͭͷϓϩδΣΫτͰObjective-CͱSwiftΛࠞ߹ͯ͠࢖͏ͨΊͷػೳ
    15
    h)ps://developer.apple.com/library/ios/documenta

    View Slide

  27. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Mix and MatchΛ࢖ͬͨSwiftҠߦύλʔϯ
    16

    View Slide

  28. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Mix and MatchΛ࢖ͬͨSwiftҠߦύλʔϯ
    16
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ

    View Slide

  29. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Mix and MatchΛ࢖ͬͨSwiftҠߦύλʔϯ
    16
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    ύλʔϯ  ≒  ෢ಓʹ͓͚Δܗ

    View Slide

  30. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Mix and MatchΛ࢖ͬͨSwiftҠߦύλʔϯ
    16
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    ύλʔϯ  ≒  ෢ಓʹ͓͚Δܗ

    View Slide

  31. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Mix and MatchΛ࢖ͬͨSwiftҠߦύλʔϯ
    16
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    ύλʔϯ  ≒  ෢ಓʹ͓͚Δܗ
    ύλʔϯԽ͢Δҙٛ

    View Slide

  32. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Mix and MatchΛ࢖ͬͨSwiftҠߦύλʔϯ
    16
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    ύλʔϯ  ≒  ෢ಓʹ͓͚Δܗ
    ύλʔϯԽ͢Δҙٛ
    →  ໎Θͣ൑அͰ͖Δ

    View Slide

  33. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Mix and MatchΛ࢖ͬͨSwiftҠߦύλʔϯ
    16
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    ύλʔϯ  ≒  ෢ಓʹ͓͚Δܗ
    ύλʔϯԽ͢Δҙٛ
    →  ໎Θͣ൑அͰ͖Δ

    View Slide

  34. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Mix and MatchΛ࢖ͬͨSwiftҠߦύλʔϯ
    16
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    ύλʔϯ  ≒  ෢ಓʹ͓͚Δܗ
    ύλʔϯԽ͢Δҙٛ
    →  ໎Θͣ൑அͰ͖Δ
    ※֤ύλʔϯ໊͸ࢲʹΑΔউखͳ໋໊

    View Slide

  35. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶃԆ໋ύλʔϯ
    17
    Objecswi7

    View Slide

  36. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶃԆ໋ύλʔϯ
    17
    objc  
    class
    objc  
    class
    objc  
    class
    Objecswi7

    View Slide

  37. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶃԆ໋ύλʔϯ
    17
    objc  
    class
    objc  
    class
    objc  
    class
    Nullability,  Genericsʹؔ͢ΔΞϊςʔγϣϯΛ෇Ճ
    Objecswi7

    View Slide

  38. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶃԆ໋ύλʔϯ
    17
    objc  
    class
    objc  
    class
    objc  
    class
    Nullability,  Genericsʹؔ͢ΔΞϊςʔγϣϯΛ෇Ճ
    ܕ҆શɾnil  ҆શ  ͳੈք
    Objecswi7

    View Slide

  39. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶃԆ໋ύλʔϯ
    17
    objc  
    class
    objc  
    class
    objc  
    class
    Nullability,  Genericsʹؔ͢ΔΞϊςʔγϣϯΛ෇Ճ
    ܕ҆શɾnil  ҆શ  ͳੈք
    swi7
    ҆શʹΞΫηε
    Objecswi7

    View Slide

  40. ᶃԆ໋ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    objcʹ Nullability, Lightweight GenericsΛ௥Ճ͢Δ
    18
    @interface UserHistory
    -(Episode*)lastEepisode;
    -(NSArray*)allEpisodes;
    @end

    View Slide

  41. ᶃԆ໋ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    objcʹ Nullability, Lightweight GenericsΛ௥Ճ͢Δ
    18
    @interface UserHistory
    -(Episode*)lastEepisode;
    -(NSArray*)allEpisodes;
    @end
    NS_ASSUME_NONNULL_BEGIN
    @interface UserHistory
    -(nullable Episode*)lastEepisode;
    -(NSArray*)allEpisodes;
    NS_ASSUME_NONNULL_END
    @end

    View Slide

  42. ᶃԆ໋ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    objcʹ Nullability, Lightweight GenericsΛ௥Ճ͢Δ
    18
    @interface UserHistory
    -(Episode*)lastEepisode;
    -(NSArray*)allEpisodes;
    @end
    NS_ASSUME_NONNULL_BEGIN
    @interface UserHistory
    -(nullable Episode*)lastEepisode;
    -(NSArray*)allEpisodes;
    NS_ASSUME_NONNULL_END
    @end
    class UserHistory {
    func lastEepisode()->Episode?
    func allEepisodes()->[Episode]
    }

    View Slide

  43. ᶃԆ໋ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    objcʹ Nullability, Lightweight GenericsΛ௥Ճ͢Δ
    • طଘͷobjcࢿ࢈Λ҆શʹ࢖͑Δ
    • ϩʔίετɾϋΠϦλʔϯ
    • SwiftରԠ΁ͷୈҰาͱͯ͠࠷ద
    18
    @interface UserHistory
    -(Episode*)lastEepisode;
    -(NSArray*)allEpisodes;
    @end
    NS_ASSUME_NONNULL_BEGIN
    @interface UserHistory
    -(nullable Episode*)lastEepisode;
    -(NSArray*)allEpisodes;
    NS_ASSUME_NONNULL_END
    @end
    class UserHistory {
    func lastEepisode()->Episode?
    func allEepisodes()->[Episode]
    }

    View Slide

  44. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶄ͝৽نύλʔϯ
    19
    Objecswi7

    View Slide

  45. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶄ͝৽نύλʔϯ
    19
    objc  
    class
    objc  
    class
    objc  
    class
    Objecswi7

    View Slide

  46. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶄ͝৽نύλʔϯ
    19
    objc  
    class
    objc  
    class
    objc  
    class
    ViewController  
    .swi7
    View   Model  
    Objecswi7

    View Slide

  47. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶄ͝৽نύλʔϯ
    19
    objc  
    class
    objc  
    class
    objc  
    class
    instanViewController  
    .swi7
    View   Model  
    Objecswi7

    View Slide

  48. ᶄ͝৽نύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ৽نViewController͸جຊϑϧSwiftͰॻ͘
    ʮ৽ن։ൃ෼͸SwiftͰॻ͖·͢ʯύλʔϯ
    طଘͷobjcίʔυͷґଘ͕গͳ͘΍Γ΍͍͢
    ৽͍͠ը໘΍ػೳΛ௥Ճ͢Δέʔεʹ͓͢͢Ί
    ྫʣ
    • Ϣʔβొ࿥ɾϩάΠϯ
    • ϚΠϝχϡʔ
    • ίΠϯߪೖॲཧ
    • ಈը޿ࠂ
    20

    View Slide

  49. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    21
    ᶅ੾Γग़͠ύλʔϯ
    Objecswi7

    View Slide

  50. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    21
    ᶅ੾Γग़͠ύλʔϯ
    objc  class  
    method  
    Objecswi7

    View Slide

  51. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    21
    ᶅ੾Γग़͠ύλʔϯ
    objc  class  
    method  
    Objecswi7

    View Slide

  52. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    21
    Logic  
    .swi7
    ᶅ੾Γग़͠ύλʔϯ
    objc  class  
    method  
    Objecswi7

    View Slide

  53. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    21
    Logic  
    .swi7
    ᶅ੾Γग़͠ύλʔϯ
    objc  class  
    method  
    ίʔϧ
    Objecswi7

    View Slide

  54. ᶅ੾Γग़͠ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϩδοΫΛswiftʹ੾Γग़͢
    22
    - (NSNumber*)getNum {
    NSNumber* num = ...;
    return num;
    }
    .m

    View Slide

  55. ᶅ੾Γग़͠ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϩδοΫΛswiftʹ੾Γग़͢
    22
    if (num.integerValue == 0) {
    NSLog(@"num is zero");
    } else {
    NSLog(@"num is non zero");
    }
    - (NSNumber*)getNum {
    NSNumber* num = ...;
    return num;
    }
    .m

    View Slide

  56. ᶅ੾Γग़͠ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϩδοΫΛswiftʹ੾Γग़͢
    22
    - (NSNumber*)getNum {
    NSNumber* num = ...;
    return num;
    }
    .m

    View Slide

  57. ᶅ੾Γग़͠ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϩδοΫΛswiftʹ੾Γग़͢
    22
    - (NSNumber*)getNum {
    NSNumber* num = ...;
    return num;
    }
    .m
    [NumLogger debug:num];

    View Slide

  58. ᶅ੾Γग़͠ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϩδοΫΛswiftʹ੾Γग़͢
    22
    - (NSNumber*)getNum {
    NSNumber* num = ...;
    return num;
    }
    .m
    +
    final class NumLogger: NSObject {
    class func debug(num:NSNumber) {
    if num.integerValue == 0 {
    print("num is zero")
    } else {
    print("num is non zero")
    }
    }
    }
    .swi7
    [NumLogger debug:num];

    View Slide

  59. ᶅ੾Γग़͠ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϩδοΫΛswiftʹ੾Γग़͢
    22
    - (NSNumber*)getNum {
    NSNumber* num = ...;
    return num;
    }
    .m
    +
    final class NumLogger: NSObject {
    class func debug(num:NSNumber) {
    if num.integerValue == 0 {
    print("num is zero")
    } else {
    print("num is non zero")
    }
    }
    }
    .swi7
    [NumLogger debug:num];
    • ࠷খݶͷมߋͰطଘobjcϝιουͷϩδοΫΛ௥Ճɾमਖ਼Ͱ͖Δ
    • ࢖͍Ͳ͜Ζɿϩάग़ྗॲཧɺόϦσʔγϣϯɺUtilతͳॲཧ
    • Ϣχοτςετ΋ॻ͖΍͍͢

    View Slide

  60. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶆϒϦοδύλʔϯ
    23
    Objecswi7

    View Slide

  61. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶆϒϦοδύλʔϯ
    23
    objc  
    class
    objc  
    class
    objc  
    class
    Objecswi7

    View Slide

  62. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶆϒϦοδύλʔϯ
    23
    Nested  Type
    Top-­‐level  
    funcTypealias
    Tuple
    enum
    enum
    enum
    struct
    struct
    struct
    objc  
    class
    objc  
    class
    objc  
    class
    Objecswi7

    View Slide

  63. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶆϒϦοδύλʔϯ
    23
    Nested  Type
    Top-­‐level  
    funcTypealias
    Tuple
    enum
    enum
    enum
    struct
    struct
    struct
    objc  
    class
    objc  
    class
    objc  
    class
    Objecswi7

    View Slide

  64. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶆϒϦοδύλʔϯ
    23
    Nested  Type
    Top-­‐level  
    funcTypealias
    Tuple
    enum
    enum
    enum
    struct
    struct
    struct
    objc  
    class
    objc  
    class
    objc  
    class
    Objecswi7

    View Slide

  65. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ᶆϒϦοδύλʔϯ
    23
    Nested  Type
    Top-­‐level  
    funcTypealias
    Tuple
    enum
    enum
    enum
    struct
    struct
    struct
    objc  
    class
    objc  
    class
    objc  
    class
    Bridging  
    NSObject
    Objecswi7

    View Slide

  66. objcͱswiftͷڮ౉͠
    Ұఆن໛ͷswfitίϯϙʔωϯτ
    objcίʔυ ͷڮ౉͠
    ᶆϒϦοδύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    24
    ޿ࠂ࿮ Ad
    networking
    logging
    imp
    click
    display/  
    event  handling

    View Slide

  67. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    25
    ᶇextensionύλʔϯ
    Objecswi7

    View Slide

  68. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    25
    ᶇextensionύλʔϯ
    FooClass  
    method1
    method2
    Objecswi7

    View Slide

  69. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    25
    ᶇextensionύλʔϯ
    FooClass  
    method1
    method2
    method3
    Objecswi7

    View Slide

  70. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    25
    ᶇextensionύλʔϯ
    FooClass  
    method1
    method2
    method3
    FooClass  
    extension    
    Objecswi7

    View Slide

  71. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    25
    ᶇextensionύλʔϯ
    FooClass  
    method1
    method2
    method3
    FooClass  
    extension    
    method3
    Objecswi7

    View Slide

  72. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    25
    ᶇextensionύλʔϯ
    FooClass  
    method1
    method2
    method3
    FooClass  
    extension    
    method3
    Objecswi7

    View Slide

  73. ᶇextensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    طଘobjcΫϥεΛextension͢Δ
    26
    @implement FooClass
    - (void)method1 {...}
    - (void)method2 {...}
    @end
    .m

    View Slide

  74. ᶇextensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    طଘobjcΫϥεΛextension͢Δ
    26
    @implement FooClass
    - (void)method1 {...}
    - (void)method2 {...}
    @end
    .m
    +
    extension FooClass {
    //ϝιου௥Ճ
    func method3() {

    }
    }
    .swi7

    View Slide

  75. ᶇextensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    طଘobjcΫϥεΛextension͢Δ
    26
    @implement FooClass
    - (void)method1 {...}
    - (void)method2 {...}
    @end
    .m
    +
    extension FooClass {
    //ϝιου௥Ճ
    func method3() {

    }
    }
    .swi7
    • Ұ൪ࣗવͰద༻ͤ͞΍͍͢ύλʔϯ

    View Slide

  76. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    27
    ᶇextensionύλʔϯ
    ViewerController
    Objecswi7

    View Slide

  77. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    27
    ᶇextensionύλʔϯ
    ViewerController
    Objecswi7

    View Slide

  78. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    27
    ᶇextensionύλʔϯ
    ViewerController
    Objecswi7

    View Slide

  79. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    27
    ᶇextensionύλʔϯ
    ViewerController ViewerController  
    extension
    Objecswi7

    View Slide

  80. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    27
    ᶇextensionύλʔϯ
    ViewerController ViewerController  
    extension
    func  
    shareBu)onDidTapped()  
    Objecswi7

    View Slide

  81. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    27
    ᶇextensionύλʔϯ
    ViewerController ViewerController  
    extension
    func  
    shareBu)onDidTapped()  
    Objecswi7

    View Slide

  82. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    Objecswi7

    View Slide

  83. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    Objecswi7

    View Slide

  84. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    Objecswi7
    method2

    View Slide

  85. FooClass  
    extension    

    extensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    Objecswi7
    method2

    View Slide

  86. FooClass  
    extension    

    extensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    Objecswi7
    method2  
    method2

    View Slide

  87. FooClass  
    extension    

    extensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    ࢀরɾίʔϧෆՄ
    Objecswi7
    method2  
    method2

    View Slide

  88. FooClass  
    extension    

    extensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    Objecswi7
    method2  
    method2

    View Slide

  89. FooClass  
    extension    

    extensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    Objecswi7
    method2  
    method2
    ҙਤతͳ  
    ΧϓηϧԽͷഁյʂ

    View Slide

  90. FooClass  
    extension    

    extensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    Bridging-­‐
    Header.h  
    Objecswi7
    method2  
    method2
    ҙਤతͳ  
    ΧϓηϧԽͷഁյʂ

    View Slide

  91. FooClass  
    extension    

    extensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    Bridging-­‐
    Header.h  
    Objecswi7
    property1
    method1
    ެ։
    method2  
    method2
    ҙਤతͳ  
    ΧϓηϧԽͷഁյʂ

    View Slide

  92. FooClass  
    extension    

    extensionύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    28
    ᶈ๫࿐ύλʔϯ
    FooClass  
    property1
    method1
    Bridging-­‐
    Header.h  
    ࢀরɾίʔϧ
    Objecswi7
    property1
    method1
    ެ։
    method2  
    method2
    ҙਤతͳ  
    ΧϓηϧԽͷഁյʂ

    View Slide

  93. ᶈ๫࿐ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    29
    @interface FooClass ()
    @property NSString property1;
    @end
    @implement FooClass
    (void)method1 {
    ...
    }
    @end
    .m
    @interface FooClass
    @end
    .h

    View Slide

  94. ᶈ๫࿐ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    29
    @interface FooClass ()
    @property NSString property1;
    @end
    @implement FooClass
    (void)method1 {
    ...
    }
    @end
    .m
    #import “xxx.h”
    #import “yyy.h”
    #import “zzz.h”
    ...
    @interface FooClass (PrivateForSwift)
    @property (readonly) NSString *property1;
    (void)method1;
    @end
    Xxxx-­‐Bridging-­‐Header.h
    +
    @interface FooClass
    @end
    .h

    View Slide

  95. ᶈ๫࿐ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    29
    @interface FooClass ()
    @property NSString property1;
    @end
    @implement FooClass
    (void)method1 {
    ...
    }
    @end
    .m
    extension FooClass {
    func methods() {
    property1 = “foo";
    method1()
    }
    }
    .swi7
    +
    #import “xxx.h”
    #import “yyy.h”
    #import “zzz.h”
    ...
    @interface FooClass (PrivateForSwift)
    @property (readonly) NSString *property1;
    (void)method1;
    @end
    Xxxx-­‐Bridging-­‐Header.h
    +
    @interface FooClass
    @end
    .h

    View Slide

  96. ᶈ๫࿐ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    29
    @interface FooClass ()
    @property NSString property1;
    @end
    @implement FooClass
    (void)method1 {
    ...
    }
    @end
    .m
    extension FooClass {
    func methods() {
    property1 = “foo";
    method1()
    }
    }
    .swi7
    +
    #import “xxx.h”
    #import “yyy.h”
    #import “zzz.h”
    ...
    @interface FooClass (PrivateForSwift)
    @property (readonly) NSString *property1;
    (void)method1;
    @end
    Xxxx-­‐Bridging-­‐Header.h
    +
    @interface FooClass
    @end
    .h
    ↑objc͸Ұ੾มߋ͍ͯ͠ͳ͍

    View Slide

  97. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    30
    ϓϥΠϕʔτଐੑΛ෦෼తʹެ։͢Δ
    ᶈ๫࿐ύλʔϯ

    View Slide

  98. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ҙਤతʹΧϓηϧԽΛഁյ
    30
    ϓϥΠϕʔτଐੑΛ෦෼తʹެ։͢Δ
    ᶈ๫࿐ύλʔϯ

    View Slide

  99. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ҙਤతʹΧϓηϧԽΛഁյ
    ⁃ extension͔ΒຊମΫϥεͷϓϥΠϕʔτଐੑ΁ͷΞΫηε͕
    Մೳʹ
    30
    ϓϥΠϕʔτଐੑΛ෦෼తʹެ։͢Δ
    ᶈ๫࿐ύλʔϯ

    View Slide

  100. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ҙਤతʹΧϓηϧԽΛഁյ
    ⁃ extension͔ΒຊମΫϥεͷϓϥΠϕʔτଐੑ΁ͷΞΫηε͕
    Մೳʹ
    ⁃ มߋՕॴ͸ϒϦοδϯάϔομͷΈɺطଘͷ.h/.m͸มߋͳ͠
    30
    ϓϥΠϕʔτଐੑΛ෦෼తʹެ։͢Δ
    ᶈ๫࿐ύλʔϯ

    View Slide

  101. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ҙਤతʹΧϓηϧԽΛഁյ
    ⁃ extension͔ΒຊମΫϥεͷϓϥΠϕʔτଐੑ΁ͷΞΫηε͕
    Մೳʹ
    ⁃ มߋՕॴ͸ϒϦοδϯάϔομͷΈɺطଘͷ.h/.m͸มߋͳ͠
    ଥڠ͕ඞཁͳ෦෼
    30
    ϓϥΠϕʔτଐੑΛ෦෼తʹެ։͢Δ
    ᶈ๫࿐ύλʔϯ

    View Slide

  102. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ҙਤతʹΧϓηϧԽΛഁյ
    ⁃ extension͔ΒຊମΫϥεͷϓϥΠϕʔτଐੑ΁ͷΞΫηε͕
    Մೳʹ
    ⁃ มߋՕॴ͸ϒϦοδϯάϔομͷΈɺطଘͷ.h/.m͸มߋͳ͠
    ଥڠ͕ඞཁͳ෦෼
    ⁃ ҟ࿦ͷग़Δͱ͜Ζ
    30
    ϓϥΠϕʔτଐੑΛ෦෼తʹެ։͢Δ
    ᶈ๫࿐ύλʔϯ

    View Slide

  103. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ҙਤతʹΧϓηϧԽΛഁյ
    ⁃ extension͔ΒຊମΫϥεͷϓϥΠϕʔτଐੑ΁ͷΞΫηε͕
    Մೳʹ
    ⁃ มߋՕॴ͸ϒϦοδϯάϔομͷΈɺطଘͷ.h/.m͸มߋͳ͠
    ଥڠ͕ඞཁͳ෦෼
    ⁃ ҟ࿦ͷग़Δͱ͜Ζ
    ⁃ Ұ࣌తͳରԠɺͱ͍͏ׂΓ੾Γ
    30
    ϓϥΠϕʔτଐੑΛ෦෼తʹެ։͢Δ
    ᶈ๫࿐ύλʔϯ

    View Slide

  104. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ҙਤతʹΧϓηϧԽΛഁյ
    ⁃ extension͔ΒຊମΫϥεͷϓϥΠϕʔτଐੑ΁ͷΞΫηε͕
    Մೳʹ
    ⁃ มߋՕॴ͸ϒϦοδϯάϔομͷΈɺطଘͷ.h/.m͸มߋͳ͠
    ଥڠ͕ඞཁͳ෦෼
    ⁃ ҟ࿦ͷग़Δͱ͜Ζ
    ⁃ Ұ࣌తͳରԠɺͱ͍͏ׂΓ੾Γ
    ⁃ ͜͜ΛׂΓ੾Ε͹SwiftԽ͸ҰؾʹਐΉ
    30
    ϓϥΠϕʔτଐੑΛ෦෼తʹެ։͢Δ
    ᶈ๫࿐ύλʔϯ

    View Slide

  105. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    31
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    31
    Objecswi7
    property2
    method2

    View Slide

  106. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    31
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    31
    Objecswi7
    property2
    method2
    FooClass  
    extension  
    method2  
    property2  

    extensionύλʔϯ
    ???

    View Slide

  107. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    31
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    31
    Objecswi7
    property2
    method2
    FooClass  
    extension  
    method2  
    property2  

    extensionύλʔϯ
    ???

    View Slide

  108. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    32
    Objecswi7

    View Slide

  109. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    Objecswi7

    View Slide

  110. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    Objecswi7
    property2
    method2

    View Slide

  111. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    Objecswi7
    property2
    method2
    FooClassBase
    rename

    View Slide

  112. FooClass  
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    Objecswi7
    property2
    method2
    FooClassBase
    rename

    View Slide

  113. FooClass  
    extends
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    Objecswi7
    property2
    method2
    FooClassBase
    rename

    View Slide

  114. FooClass  
    extends
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    method2  
    property2  
    Objecswi7
    property2
    method2
    FooClassBase
    rename

    View Slide

  115. FooClass  
    extends
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    method2  
    property2  
    Objecswi7
    FooClassBase
    rename

    View Slide

  116. FooClass  
    extends
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    method2  
    property2  
    Objecswi7
    ࢀরɾίʔϧ?
    FooClassBase
    rename

    View Slide

  117. FooClass  
    extends
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    method2  
    property2  
    Objecswi7
    FooClassBase
    rename

    View Slide

  118. FooClass  
    extends
    Bridging-­‐
    Header.h  
    +ᶈ๫࿐ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    method2  
    property2  
    Objecswi7
    FooClassBase
    rename

    View Slide

  119. FooClass  
    extends
    Bridging-­‐
    Header.h  
    +ᶈ๫࿐ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    method2  
    property2  
    Objecswi7
    property1
    method1
    ެ։
    FooClassBase
    rename

    View Slide

  120. FooClass  
    extends
    Bridging-­‐
    Header.h  
    +ᶈ๫࿐ύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    32
    ᶉ৐ͬऔΓύλʔϯ
    FooClass  
    method1
    property1
    32
    method2  
    property2  
    Objecswi7
    property1
    method1
    ެ։
    ࢀরɾίʔϧ
    FooClassBase
    rename

    View Slide

  121. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    33
    objΫϥεΛswiftͰܧঝ໊͠લΛ৐ͬऔΔ
    ᶉ৐ͬऔΓύλʔϯ

    View Slide

  122. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ⁃ ܧঝͯ͠৐ͬऔΔ
    33
    objΫϥεΛswiftͰܧঝ໊͠લΛ৐ͬऔΔ
    ᶉ৐ͬऔΓύλʔϯ

    View Slide

  123. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ⁃ ܧঝͯ͠৐ͬऔΔ
    • ΫϥεຊମΛSwiftʹҠ͠ସ͑ɺطଘobjcΫϥε͸਌
    ΫϥεԽ
    33
    objΫϥεΛswiftͰܧঝ໊͠લΛ৐ͬऔΔ
    ᶉ৐ͬऔΓύλʔϯ

    View Slide

  124. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ⁃ ܧঝͯ͠৐ͬऔΔ
    • ΫϥεຊମΛSwiftʹҠ͠ସ͑ɺطଘobjcΫϥε͸਌
    ΫϥεԽ
    • ϓϩύςΟ΍ϝιου͸ࣗ༝ʹ௥ՃՄೳ
    33
    objΫϥεΛswiftͰܧঝ໊͠લΛ৐ͬऔΔ
    ᶉ৐ͬऔΓύλʔϯ

    View Slide

  125. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ⁃ ܧঝͯ͠৐ͬऔΔ
    • ΫϥεຊମΛSwiftʹҠ͠ସ͑ɺطଘobjcΫϥε͸਌
    ΫϥεԽ
    • ϓϩύςΟ΍ϝιου͸ࣗ༝ʹ௥ՃՄೳ
    • ᶈ๫࿐ύλʔϯͷซ༻Մೳ
    33
    objΫϥεΛswiftͰܧঝ໊͠લΛ৐ͬऔΔ
    ᶉ৐ͬऔΓύλʔϯ

    View Slide

  126. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ⁃ ܧঝͯ͠৐ͬऔΔ
    • ΫϥεຊମΛSwiftʹҠ͠ସ͑ɺطଘobjcΫϥε͸਌
    ΫϥεԽ
    • ϓϩύςΟ΍ϝιου͸ࣗ༝ʹ௥ՃՄೳ
    • ᶈ๫࿐ύλʔϯͷซ༻Մೳ
    ⁃ ଥڠϙΠϯτ
    33
    objΫϥεΛswiftͰܧঝ໊͠લΛ৐ͬऔΔ
    ᶉ৐ͬऔΓύλʔϯ

    View Slide

  127. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ⁃ ܧঝͯ͠৐ͬऔΔ
    • ΫϥεຊମΛSwiftʹҠ͠ସ͑ɺطଘobjcΫϥε͸਌
    ΫϥεԽ
    • ϓϩύςΟ΍ϝιου͸ࣗ༝ʹ௥ՃՄೳ
    • ᶈ๫࿐ύλʔϯͷซ༻Մೳ
    ⁃ ଥڠϙΠϯτ
    • ܧঝؔ܎͕มߋ͞ΕΔ
    33
    objΫϥεΛswiftͰܧঝ໊͠લΛ৐ͬऔΔ
    ᶉ৐ͬऔΓύλʔϯ

    View Slide

  128. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ⁃ ܧঝͯ͠৐ͬऔΔ
    • ΫϥεຊମΛSwiftʹҠ͠ସ͑ɺطଘobjcΫϥε͸਌
    ΫϥεԽ
    • ϓϩύςΟ΍ϝιου͸ࣗ༝ʹ௥ՃՄೳ
    • ᶈ๫࿐ύλʔϯͷซ༻Մೳ
    ⁃ ଥڠϙΠϯτ
    • ܧঝؔ܎͕มߋ͞ΕΔ
    ⁃ ผղˠ
    33
    objΫϥεΛswiftͰܧঝ໊͠લΛ৐ͬऔΔ
    ᶉ৐ͬऔΓύλʔϯ

    View Slide

  129. FooClass  
    method1
    property1
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    34
    ᶉผղɿ৐ͬऔΓύλʔϯ(ΧςΰϦ֦ு)
    FooClass  
    34
    property2  
    (Category  Extension)
    Objecswi7
    property1
    extensionͰ͸ͳ͘  
    ಉ໊ΫϥεΛSwi7Ͱ
    ݩͷFooClassΛ  
    objcΧςΰϦ֦ுʹ߱֨

    View Slide

  130. FooClass  
    method1
    property1
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    34
    ᶉผղɿ৐ͬऔΓύλʔϯ(ΧςΰϦ֦ு)
    FooClass  
    34
    property2  
    (Category  Extension)
    Objecswi7
    property1
    extensionͰ͸ͳ͘  
    ಉ໊ΫϥεΛSwi7Ͱ
    ݩͷFooClassΛ  
    objcΧςΰϦ֦ுʹ߱֨
    ☓৐ͬऔΓݩPCKDʹϓϥΠϕʔτଐੑ͕͋Δ৔߹ɺ੍ݶଟΊͳͷͰ/(

    View Slide

  131. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ࢀߟɿΞϯνύλʔϯ
    35
    //ετΞυϓϩύςΟͷ௥Ճ
    var name:String {
    get { return objc_getAssociatedObject(self, &key) as! String }
    set { objc_setAssociatedObject(self, &key, newValue,
    .OBJC_ASSOCIATION_RETAIN_NONATOMIC)}
    }
    //ϓϥΠϕʔτϝιουͷ࣮ߦ
    if respondsToSelector("_reload") {
    performSelector("_reload")
    }
    //ϓϥΠϕʔτϓϩύςΟͷࢀর
    if let titleLabel = valueForKey("TitleLabel") as? UILabel {
    ...
    }
    • ΧϓηϧԽΛഁյͤͣʹϓϥΠϕʔτ
    ଐੑΛࢀরɾ௥ՃՄೳ  
    • ϝϯςφϯεੑ˚  
    • ϚϯΨϘοΫεͰ͸ۃྗ࢖༻͠ͳ͍Α
    ͏ʹ͍ͯ͠Δ
    associatedObject
    Ωʔ஋ίʔσΟϯά
    objcηϨΫλʔ

    View Slide

  132. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    36
    ᶊࣸܦύλʔϯ
    Objecswi7

    View Slide

  133. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    36
    FooClass  
    method1
    method2
    ᶊࣸܦύλʔϯ
    Objecswi7

    View Slide

  134. ࣸܦ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    36
    FooClass  
    method1
    method2
    ᶊࣸܦύλʔϯ
    Objecswi7

    View Slide

  135. FooClass  
    method1
    method2
    ࣸܦ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    36
    FooClass  
    method1
    method2
    ᶊࣸܦύλʔϯ
    Objecswi7

    View Slide

  136. FooClass  
    method1
    method2
    ࣸܦ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    36
    ᶊࣸܦύλʔϯ
    Objecswi7

    View Slide

  137. FooClass  
    method1
    method2
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    36
    ᶊࣸܦύλʔϯ
    Objecswi7

    View Slide

  138. ᶊࣸܦύλʔϯ
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    طଘͷobjcίʔυΛswiftͰॻ͖௚͢
    • ࠷ޙͷखஈ
    • ςετͷ༗ແͰϦεΫมಈ
    • ݩίʔυ͕ςετͰอޢ͞Ε͍ͯΔˠ˕
    • ର৅objcίʔυΛ·ͣςετͰอޢ͔ͯ͠ΒSwiftͰॻ͖௚͢ˠ̋
    • ׬શॻ͖௚͠ˠ˚
    • ͋Δҙຯγϯϓϧ͕ͩɺϑϧQA͸ඞਢɺίετେ
    37

    View Slide

  139. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ࢀߟɿࣸܦͷ͓ڙʹ
    38
    • Generated Interface

    View Slide

  140. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ࢀߟɿࣸܦͷ͓ڙʹ
    39
    • Generated Interface

    View Slide

  141. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ࢀߟɿࣸܦͷ͓ڙʹ
    40
    • Generated Interface

    View Slide

  142. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ࢀߟɿࣸܦͷ͓ڙʹ
    • objc→swift ίʔυม׵πʔϧ
    • https://github.com/yahoojapan/objc2swift
    • https://objectivec2swift.com/?ref=producthunt#/converter/code
    • http://iswift.org
    • https://myappconverter.com
    • https://itunes.apple.com/us/app/o2swift-objective-c-to-swift/id1060352413?ls=1&mt=12
    • ͍ͣΕ΋ػցతͳม׵ͳͷͰख௚͠ˍQA͸ඞਢ
    41

    View Slide

  143. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    42
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    Mix-and-MatchΛ࢖ͬͨSwiftҠߦύλʔϯ ϦεΫ  
    τϦοΩʔ౓  
    Swi7Ҡߦ౓


    View Slide

  144. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    43

    View Slide

  145. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    44
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ

    View Slide

  146. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    44
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    h)p://shop.ohmsha.co.jp/shopdetail/000000003881/
    ϦϑΝΫλϦϯά

    View Slide

  147. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    44
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    h)p://shop.ohmsha.co.jp/shopdetail/000000003881/
    ϦϑΝΫλϦϯά
    Extract  Method  
    Extract  Class

    View Slide

  148. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    45
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ

    View Slide

  149. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    45
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    h)p://www.sbcr.jp/products/4797311126.html
    gof  σβΠϯύλʔϯ

    View Slide

  150. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    45
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    h)p://www.sbcr.jp/products/4797311126.html
    gof  σβΠϯύλʔϯ
    Bridgeύλʔϯ

    View Slide

  151. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    46
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ

    View Slide

  152. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    46
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    h)p://www.shoeisha.co.jp/book/detail/9784798116839
    ϨΨγʔίʔυվળΨΠυ

    View Slide

  153. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    Կ͔ʹࣅ͍ͯΔ
    46
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    h)p://www.shoeisha.co.jp/book/detail/9784798116839
    ϨΨγʔίʔυվળΨΠυ
    • εϓϥ΢τϝιου  
    • εϓϥ΢τΫϥε  
    • ੩తϝιουͷެ։
    ςετίʔυΛॻͨ͘ΊͷϦϑΝΫλϦϯάख๏

    View Slide

  154. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    47
    ᶃ Ԇ໋ύλʔϯ
    ᶄ ͝৽نύλʔϯ
    ᶅ ੾Γग़͠ύλʔϯ
    ᶆ ϒϦοδύλʔϯ
    ᶇ extensionύλʔϯ
    ᶈ ๫࿐ύλʔϯ
    ᶉ ৐ͬऔΓύλʔϯ
    ᶊ ࣸܦύλʔϯ
    Mix-and-MatchΛ࢖ͬͨSwiftҠߦύλʔϯ
    طଘͷιϑτ΢ΣΞ։ൃٕ๏ͷ׆༻ʹΑΓ  
    εϜʔζɾ҆શʹSwi7ҠߦՄೳ

    View Slide

  155. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    48

    View Slide

  156. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    49

    View Slide

  157. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    Objective-C͔ΒSwiftԽ΁ͷҠߦ͸େมʁ
    49

    View Slide

  158. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    Objective-C͔ΒSwiftԽ΁ͷҠߦ͸େมʁ
    →·ͣ͸؆୯ͳύλʔϯ͔Βࢼͯ͠ΈΔ
    49

    View Slide

  159. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    Objective-C͔ΒSwiftԽ΁ͷҠߦ͸େมʁ
    →·ͣ͸؆୯ͳύλʔϯ͔Βࢼͯ͠ΈΔ
    • Ԇ໋ύλʔϯ
    49

    View Slide

  160. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    Objective-C͔ΒSwiftԽ΁ͷҠߦ͸େมʁ
    →·ͣ͸؆୯ͳύλʔϯ͔Βࢼͯ͠ΈΔ
    • Ԇ໋ύλʔϯ
    • ͝৽نύλʔϯ
    49

    View Slide

  161. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    Objective-C͔ΒSwiftԽ΁ͷҠߦ͸େมʁ
    →·ͣ͸؆୯ͳύλʔϯ͔Βࢼͯ͠ΈΔ
    • Ԇ໋ύλʔϯ
    • ͝৽نύλʔϯ
    ׳Ε͖ͯͨΒ͍ΖΜͳύλʔϯΛࢼ͢
    49

    View Slide

  162. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    Objective-C͔ΒSwiftԽ΁ͷҠߦ͸େมʁ
    →·ͣ͸؆୯ͳύλʔϯ͔Βࢼͯ͠ΈΔ
    • Ԇ໋ύλʔϯ
    • ͝৽نύλʔϯ
    ׳Ε͖ͯͨΒ͍ΖΜͳύλʔϯΛࢼ͢
    ύλʔϯʹ͍ͭͯ͋Ε͜Εߟ͑Δͷ΋ָ͍͠
    49

    View Slide

  163. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    Objective-C͔ΒSwiftԽ΁ͷҠߦ͸େมʁ
    →·ͣ͸؆୯ͳύλʔϯ͔Βࢼͯ͠ΈΔ
    • Ԇ໋ύλʔϯ
    • ͝৽نύλʔϯ
    ׳Ε͖ͯͨΒ͍ΖΜͳύλʔϯΛࢼ͢
    ύλʔϯʹ͍ͭͯ͋Ε͜Εߟ͑Δͷ΋ָ͍͠
    ⁃ ଞʹ΋ྑ͍ύλʔϯ͕͋Γͦ͏
    49

    View Slide

  164. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ·ͱΊ
    Objective-C͔ΒSwiftԽ΁ͷҠߦ͸େมʁ
    →·ͣ͸؆୯ͳύλʔϯ͔Βࢼͯ͠ΈΔ
    • Ԇ໋ύλʔϯ
    • ͝৽نύλʔϯ
    ׳Ε͖ͯͨΒ͍ΖΜͳύλʔϯΛࢼ͢
    ύλʔϯʹ͍ͭͯ͋Ε͜Εߟ͑Δͷ΋ָ͍͠
    ⁃ ଞʹ΋ྑ͍ύλʔϯ͕͋Γͦ͏
    ⁃ ໊͔͍͍ͬ͜લر๬
    49

    View Slide

  165. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    50
    objc

    View Slide

  166. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    50
    objc

    View Slide

  167. swi7
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    50
    objc

    View Slide

  168. swi7
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    51
    objc

    View Slide

  169. swi7
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    52
    objc
    swi7

    View Slide

  170. swi7
    swi7
    swi7
    swi7
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    53
    objc
    swi7
    swi7

    View Slide

  171. objc
    swi7
    swi7
    Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    54
    swi7
    swi7
    swi7
    swi7
    swi7
    swi7

    View Slide

  172. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    55
    swi7

    View Slide

  173. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    56


    Ͳ
    ͏
    Ͱ
    ͢
    ͔

    View Slide

  174. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ϚϯΨϘοΫεͷݱࡏͷSwiftԽ཰
    17%ఔ౓
    ·ͩ·ͩ͜Ε͔Β
    57

    View Slide

  175. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ࠓޙͷ༧ଌʢࡶʣ
    58
    2020೥  ver5.6  ʹͯSwi7Խ཰100%౸ୡ༧ఆʢࡶʣʂʂʂ

    View Slide

  176. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    59
    Let’s Objc to Swift !

    View Slide

  177. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
    ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ
    60

    View Slide