$30 off During Our Annual Pro Sale. View Details »

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. ʙϚϯΨϘοΫε։ൃʹ͓͚Δࣄྫʙ
  2. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ࣗݾ঺հ দલ݈ଠ࿠ (id:kenmaz)

    2003.4 ೔ཱιϦϡʔγϣϯζ (چɾ೔ཱιϑτ΢ΣΞΤϯδχΞϦϯάʣ SIer, Java, Ruby, ଞ 2009.6 υϫϯΰ χίχίɺଞ 2013.4 DeNA ϚϯΨϘοΫε ϦʔυΤϯδχΞ 2
  3. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 4 ϓϩ࡞Ոͷ  

    ඳ͖͓Ζ͠࡞඼͕   ຖ೔ߋ৽ɺແྉͰಡΊΔ   ϚϯΨࡶࢽΞϓϦ
  4. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ϚϯΨϘοΫεʹ͓͚ΔϨΨγʔίʔυ •։ൃελʔτ͔Β໿̏೥ •iOS6࣌୅ͷίʔυଟ਺

    •ػೳ௥Ճʹ൐͏ίʔυͷෳࡶԽ •ϨΨγʔίʔυԽͷஹީ 9 iOSϨΨγʔίʔυվળΨΠυ ϨΨγʔίʔυԽͤ͞ͳ͍ͨΊͷऔΓ૊Έ
  5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶃϦϦʔεαΠΫϧͷݟ௚͠ ᶄSwift΁ͷҠߦ ᶅAutoLayout΁ͷରԠ

    ᶆઃܭ ᶇӡ༻ɾϩά 10 iOS ϨΨγʔίʔυվળΨΠυ ޙ೔webͰެ։Ͱ͖Ε͹ɾɾɾ
  6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 12 h)ps://developer.apple.com/swi7/ •

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

    Type  Safe   • Op<onal   • Immutable   • Generics SwiftҠߦͷҙٛ ݴޠͷ҆શੑʹΞϓϦͷ඼࣭ʹ௚݁
  8. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. SwiftҠߦ΁ͷجຊઓུ 1. طଘίʔυͷڍಈΛഁյ͠ͳ͍͜ͱ

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

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

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

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

    ͻͱͭͷϓϩδΣΫτͰObjective-CͱSwiftΛࠞ߹ͯ͠࢖͏ͨΊͷػೳ 15 h)ps://developer.apple.com/library/ios/documenta<on/Swi7/Conceptual/BuildingCocoaApps/MixandMatch.html
  13. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Mix and MatchΛ࢖ͬͨSwiftҠߦύλʔϯ

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

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

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

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

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

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

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

      class objc   class objc   class Objec<ve-­‐C swi7
  21. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶃԆ໋ύλʔϯ 17 objc

      class objc   class objc   class Nullability,  Genericsʹؔ͢ΔΞϊςʔγϣϯΛ෇Ճ Objec<ve-­‐C swi7
  22. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶃԆ໋ύλʔϯ 17 objc

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

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

    Lightweight GenericsΛ௥Ճ͢Δ 18 @interface UserHistory -(Episode*)lastEepisode; -(NSArray*)allEpisodes; @end
  25. ᶃԆ໋ύλʔϯ 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<Episode*>*)allEpisodes; NS_ASSUME_NONNULL_END @end
  26. ᶃԆ໋ύλʔϯ 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<Episode*>*)allEpisodes; NS_ASSUME_NONNULL_END @end class UserHistory { func lastEepisode()->Episode? func allEepisodes()->[Episode] }
  27. ᶃԆ໋ύλʔϯ 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<Episode*>*)allEpisodes; NS_ASSUME_NONNULL_END @end class UserHistory { func lastEepisode()->Episode? func allEepisodes()->[Episode] }
  28. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶄ͝৽نύλʔϯ 19 objc

      class objc   class objc   class Objec<ve-­‐C swi7
  29. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶄ͝৽نύλʔϯ 19 objc

      class objc   class objc   class ViewController   .swi7 View   Model   Objec<ve-­‐C swi7
  30. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶄ͝৽نύλʔϯ 19 objc

      class objc   class objc   class instan<ate ViewController   .swi7 View   Model   Objec<ve-­‐C swi7
  31. ᶄ͝৽نύλʔϯ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ৽نViewController͸جຊϑϧSwiftͰॻ͘ ʮ৽ن։ൃ෼͸SwiftͰॻ͖·͢ʯύλʔϯ

    طଘͷobjcίʔυͷґଘ͕গͳ͘΍Γ΍͍͢ ৽͍͠ը໘΍ػೳΛ௥Ճ͢Δέʔεʹ͓͢͢Ί ྫʣ • Ϣʔβొ࿥ɾϩάΠϯ • ϚΠϝχϡʔ • ίΠϯߪೖॲཧ • ಈը޿ࠂ 20
  32. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 21 Logic  

    .swi7 ᶅ੾Γग़͠ύλʔϯ objc  class   method   Objec<ve-­‐C swi7
  33. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 21 Logic  

    .swi7 ᶅ੾Γग़͠ύλʔϯ objc  class   method   ίʔϧ Objec<ve-­‐C swi7
  34. ᶅ੾Γग़͠ύλʔϯ 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
  35. ᶅ੾Γग़͠ύλʔϯ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ϩδοΫΛswiftʹ੾Γग़͢ 22

    - (NSNumber*)getNum { NSNumber* num = ...; return num; } .m [NumLogger debug:num];
  36. ᶅ੾Γग़͠ύλʔϯ 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];
  37. ᶅ੾Γग़͠ύλʔϯ 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తͳॲཧ • Ϣχοτςετ΋ॻ͖΍͍͢
  38. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶆϒϦοδύλʔϯ 23 objc

      class objc   class objc   class Objec<ve-­‐C swi7
  39. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶆϒϦοδύλʔϯ 23 Nested

     Type Top-­‐level   func<on Typealias Tuple enum enum enum struct struct struct objc   class objc   class objc   class Objec<ve-­‐C swi7
  40. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶆϒϦοδύλʔϯ 23 Nested

     Type Top-­‐level   func<on Typealias Tuple enum enum enum struct struct struct objc   class objc   class objc   class Objec<ve-­‐C swi7
  41. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶆϒϦοδύλʔϯ 23 Nested

     Type Top-­‐level   func<on Typealias Tuple enum enum enum struct struct struct objc   class objc   class objc   class Objec<ve-­‐C swi7
  42. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ᶆϒϦοδύλʔϯ 23 Nested

     Type Top-­‐level   func<on Typealias Tuple enum enum enum struct struct struct objc   class objc   class objc   class Bridging   NSObject Objec<ve-­‐C swi7
  43. objcͱswiftͷڮ౉͠ Ұఆن໛ͷswfitίϯϙʔωϯτ objcίʔυ ͷڮ౉͠ ᶆϒϦοδύλʔϯ Copyright (C) DeNA Co.,Ltd. All

    Rights Reserved. 24 ޿ࠂ࿮ Ad networking logging imp click display/   event  handling
  44. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 25 ᶇextensionύλʔϯ FooClass

      method1 method2 method3 FooClass   extension     Objec<ve-­‐C swi7
  45. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 25 ᶇextensionύλʔϯ FooClass

      method1 method2 method3 FooClass   extension     method3 Objec<ve-­‐C swi7
  46. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 25 ᶇextensionύλʔϯ FooClass

      method1 method2 method3 FooClass   extension     method3 Objec<ve-­‐C swi7
  47. ᶇextensionύλʔϯ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. طଘobjcΫϥεΛextension͢Δ 26

    @implement FooClass - (void)method1 {...} - (void)method2 {...} @end .m
  48. ᶇ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
  49. ᶇ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 • Ұ൪ࣗવͰద༻ͤ͞΍͍͢ύλʔϯ
  50. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 27 ᶇextensionύλʔϯ ViewerController

    ViewerController   extension func   shareBu)onDidTapped()   Objec<ve-­‐C swi7
  51. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 27 ᶇextensionύλʔϯ ViewerController

    ViewerController   extension func   shareBu)onDidTapped()   Objec<ve-­‐C swi7
  52. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 28 ᶈ๫࿐ύλʔϯ FooClass

      property1 method1 Objec<ve-­‐C swi7 method2
  53. FooClass   extension     ᶇ extensionύλʔϯ Copyright (C) DeNA

    Co.,Ltd. All Rights Reserved. 28 ᶈ๫࿐ύλʔϯ FooClass   property1 method1 Objec<ve-­‐C swi7 method2
  54. FooClass   extension     ᶇ extensionύλʔϯ Copyright (C) DeNA

    Co.,Ltd. All Rights Reserved. 28 ᶈ๫࿐ύλʔϯ FooClass   property1 method1 Objec<ve-­‐C swi7 method2   method2
  55. FooClass   extension     ᶇ extensionύλʔϯ Copyright (C) DeNA

    Co.,Ltd. All Rights Reserved. 28 ᶈ๫࿐ύλʔϯ FooClass   property1 method1 ࢀরɾίʔϧෆՄ Objec<ve-­‐C swi7 method2   method2
  56. FooClass   extension     ᶇ extensionύλʔϯ Copyright (C) DeNA

    Co.,Ltd. All Rights Reserved. 28 ᶈ๫࿐ύλʔϯ FooClass   property1 method1 Objec<ve-­‐C swi7 method2   method2
  57. FooClass   extension     ᶇ extensionύλʔϯ Copyright (C) DeNA

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

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

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

    Co.,Ltd. All Rights Reserved. 28 ᶈ๫࿐ύλʔϯ FooClass   property1 method1 Bridging-­‐ Header.h   ࢀরɾίʔϧ Objec<ve-­‐C swi7 property1 method1 ެ։ method2   method2 ҙਤతͳ   ΧϓηϧԽͷഁյʂ
  61. ᶈ๫࿐ύλʔϯ 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
  62. ᶈ๫࿐ύλʔϯ 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
  63. ᶈ๫࿐ύλʔϯ 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
  64. ᶈ๫࿐ύλʔϯ 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͸Ұ੾มߋ͍ͯ͠ͳ͍
  65. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ҙਤతʹΧϓηϧԽΛഁյ ⁃ extension͔ΒຊମΫϥεͷϓϥΠϕʔτଐੑ΁ͷΞΫηε͕

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

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

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

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

    Մೳʹ ⁃ มߋՕॴ͸ϒϦοδϯάϔομͷΈɺطଘͷ.h/.m͸มߋͳ͠ ଥڠ͕ඞཁͳ෦෼ ⁃ ҟ࿦ͷग़Δͱ͜Ζ ⁃ Ұ࣌తͳରԠɺͱ͍͏ׂΓ੾Γ ⁃ ͜͜ΛׂΓ੾Ε͹SwiftԽ͸ҰؾʹਐΉ 30 ϓϥΠϕʔτଐੑΛ෦෼తʹެ։͢Δ ᶈ๫࿐ύλʔϯ
  70. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 31 ᶉ৐ͬऔΓύλʔϯ FooClass

      method1 property1 31 Objec<ve-­‐C swi7 property2 method2
  71. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 31 ᶉ৐ͬऔΓύλʔϯ FooClass

      method1 property1 31 Objec<ve-­‐C swi7 property2 method2 FooClass   extension   method2   property2   ᶇ extensionύλʔϯ ???
  72. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 31 ᶉ৐ͬऔΓύλʔϯ FooClass

      method1 property1 31 Objec<ve-­‐C swi7 property2 method2 FooClass   extension   method2   property2   ᶇ extensionύλʔϯ ???
  73. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 32 ᶉ৐ͬऔΓύλʔϯ FooClass

      method1 property1 32 Objec<ve-­‐C swi7 property2 method2
  74. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 32 ᶉ৐ͬऔΓύλʔϯ FooClass

      method1 property1 32 Objec<ve-­‐C swi7 property2 method2 FooClassBase rename
  75. FooClass   Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 32

    ᶉ৐ͬऔΓύλʔϯ FooClass   method1 property1 32 Objec<ve-­‐C swi7 property2 method2 FooClassBase rename
  76. FooClass   extends Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

    32 ᶉ৐ͬऔΓύλʔϯ FooClass   method1 property1 32 Objec<ve-­‐C swi7 property2 method2 FooClassBase rename
  77. FooClass   extends Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

    32 ᶉ৐ͬऔΓύλʔϯ FooClass   method1 property1 32 method2   property2   Objec<ve-­‐C swi7 property2 method2 FooClassBase rename
  78. FooClass   extends Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

    32 ᶉ৐ͬऔΓύλʔϯ FooClass   method1 property1 32 method2   property2   Objec<ve-­‐C swi7 FooClassBase rename
  79. FooClass   extends Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

    32 ᶉ৐ͬऔΓύλʔϯ FooClass   method1 property1 32 method2   property2   Objec<ve-­‐C swi7 ࢀরɾίʔϧ? FooClassBase rename
  80. FooClass   extends Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

    32 ᶉ৐ͬऔΓύλʔϯ FooClass   method1 property1 32 method2   property2   Objec<ve-­‐C swi7 FooClassBase rename
  81. FooClass   extends Bridging-­‐ Header.h   +ᶈ๫࿐ύλʔϯ Copyright (C) DeNA

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

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

    Co.,Ltd. All Rights Reserved. 32 ᶉ৐ͬऔΓύλʔϯ FooClass   method1 property1 32 method2   property2   Objec<ve-­‐C swi7 property1 method1 ެ։ ࢀরɾίʔϧ FooClassBase rename
  84. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ⁃ ܧঝͯ͠৐ͬऔΔ 33

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

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

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

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

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

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

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

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

    Reserved. 34 ᶉผղɿ৐ͬऔΓύλʔϯ(ΧςΰϦ֦ு) FooClass   34 property2   (Category  Extension) Objec<ve-­‐C swi7 property1 extensionͰ͸ͳ͘   ಉ໊ΫϥεΛSwi7Ͱ ݩͷFooClassΛ   objcΧςΰϦ֦ுʹ߱֨ ☓৐ͬऔΓݩPCKDʹϓϥΠϕʔτଐੑ͕͋Δ৔߹ɺ੍ݶଟΊͳͷͰ/(
  93. 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ηϨΫλʔ
  94. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 36 FooClass  

    method1 method2 ᶊࣸܦύλʔϯ Objec<ve-­‐C swi7
  95. ࣸܦ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 36 FooClass

      method1 method2 ᶊࣸܦύλʔϯ Objec<ve-­‐C swi7
  96. FooClass   method1 method2 ࣸܦ Copyright (C) DeNA Co.,Ltd. All

    Rights Reserved. 36 FooClass   method1 method2 ᶊࣸܦύλʔϯ Objec<ve-­‐C swi7
  97. FooClass   method1 method2 ࣸܦ Copyright (C) DeNA Co.,Ltd. All

    Rights Reserved. 36 ᶊࣸܦύλʔϯ Objec<ve-­‐C swi7
  98. FooClass   method1 method2 Copyright (C) DeNA Co.,Ltd. All Rights

    Reserved. 36 ᶊࣸܦύλʔϯ Objec<ve-­‐C swi7
  99. ᶊࣸܦύλʔϯ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. طଘͷobjcίʔυΛswiftͰॻ͖௚͢ •

    ࠷ޙͷखஈ • ςετͷ༗ແͰϦεΫมಈ • ݩίʔυ͕ςετͰอޢ͞Ε͍ͯΔˠ˕ • ର৅objcίʔυΛ·ͣςετͰอޢ͔ͯ͠ΒSwiftͰॻ͖௚͢ˠ̋ • ׬શॻ͖௚͠ˠ˚ • ͋Δҙຯγϯϓϧ͕ͩɺϑϧQA͸ඞਢɺίετେ 37
  100. 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
  101. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 42 ᶃ Ԇ໋ύλʔϯ

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

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

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

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

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

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

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

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

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

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

    ᶄ ͝৽نύλʔϯ ᶅ ੾Γग़͠ύλʔϯ ᶆ ϒϦοδύλʔϯ ᶇ extensionύλʔϯ ᶈ ๫࿐ύλʔϯ ᶉ ৐ͬऔΓύλʔϯ ᶊ ࣸܦύλʔϯ Mix-and-MatchΛ࢖ͬͨSwiftҠߦύλʔϯ طଘͷιϑτ΢ΣΞ։ൃٕ๏ͷ׆༻ʹΑΓ   εϜʔζɾ҆શʹSwi7ҠߦՄೳ
  112. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ·ͱΊ Objective-C͔ΒSwiftԽ΁ͷҠߦ͸େมʁ →·ͣ͸؆୯ͳύλʔϯ͔Βࢼͯ͠ΈΔ

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

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

    • Ԇ໋ύλʔϯ • ͝৽نύλʔϯ ׳Ε͖ͯͨΒ͍ΖΜͳύλʔϯΛࢼ͢ ύλʔϯʹ͍ͭͯ͋Ε͜Εߟ͑Δͷ΋ָ͍͠ ⁃ ଞʹ΋ྑ͍ύλʔϯ͕͋Γͦ͏ ⁃ ໊͔͍͍ͬ͜લر๬ 49
  115. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ࠓޙͷ༧ଌʢࡶʣ 58 2020೥

     ver5.6  ʹͯSwi7Խ཰100%౸ୡ༧ఆʢࡶʣʂʂʂ