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

Objective-CからSwift移行を始めて感じた事/ObjC-to-Swift

 Objective-CからSwift移行を始めて感じた事/ObjC-to-Swift

253696343a018052ff394eb1f63e3d6f?s=128

Taketo Yoshida

January 17, 2017
Tweet

Transcript

  1. 1 0CKFDUJWF$ַ׵4XJGU獳遤׾㨣׭ג 䠬ׄ׋✲ 5BLFUP:PTIJEB傈劤穗幥倜耀爡 ؟ه٦ة٦ؤ⹈䓼⠓ _չ傈穗ꨵ㶨晛،فٔպךٖؖء٦؝٦س׾何㊣ׅ׷_

  2. 2 荈䊹稱➜ し歊⨳➂ :PTIJEB5BLFUP (JUIVCUBNBOZBO 傈劤穗幥倜耀爡ךJ04ؒٝآص، 莆㄂ꅿ椔ծ⨳䏿ծ匌⽂،آ، 䞔㜠䊨㷕禸ך㣐㷕ꤍ׾⼼噟䖓䎃ח傈穗חⰅ爡

  3. 3 傈穗הכ 倜耀 ꧟钞 佝鷏 ر٦ة ؎ٝرحؙأ

  4. 4 傈劤穗幥倜耀הכ 傈穗ךً؎ٝفٗتؙز 䎃僇屚䎃ⶼⴚ 劉ⴚכ♰鿇涪遤

  5. 5 傈穗ꨵ㶨晛הכ 䎃剢ⶼⴚ 剢꟦،ؙإأ⭙⟝ 嫣傈秈劤ך鎸✲׾ꂁ⥋ 1$٥ٌغ؎ٕ؟؎زծJ04٥"OESPJE،فٔ 剣俱⠓㆞  ⰼ剢 秈♰➂

    搀俱⠓㆞秈♰➂ ꬊ涫ꐮ秈♰6#
  6. 6 傈穗ꨵ㶨晛ךⰻ醡Ꟛ涪חאְג 䎃剢ַ׵ⰻ醡Ꟛ涪فٗآؙؑزָ㨣⹛ 爡ⰻךث٦ي⡤ⵖך㢌刿 خ٦ٕ㼪Ⰵ4MBDL (JUIVC 2JJUB5FBNזו 倜⼼٥⚥鷿䱰欽ך何㊣

  7. 7 劤傈ךכגעךذؙظٗآ٦ؒٝزٔ٦

  8. 8 傈穗ꨵ㶨晛،فٔ 䎃剢ٔٔ٦أ 傈穗ⴱךⰻ醡Ꟛ涪ךJ04،فٔ Ꟛ涪鎉铂כ0CKFDUJWF$

  9. 9 秵꬗ؽُ٦،٦،فٔ 䎃剢ٔٔ٦أ Ꟛ涪鎉铂כ4XJGU 猘ָ倜Ⰵ爡㆞ך儗חꟚ涪׃׋،فٔ

  10. 10 植㖈ךJ04ث٦ي⡤ⵖ J04ؒٝآص، فٗآؙؑزوط٦آٍ٦ 㢩鿇ךJ04ؒٝآص،

  11. 11 כׄ׭ח

  12. 12 4XJGU涫㜥ַ׵♲䎃 ؔ٦فٝا٦أ⻉׮֮׏גծ鑧겗כ0CKFDUJWF$ַ׵4XJGUח Ꟛ涪⸬桦ծ؟ه٦زծ㘗㸜Ⰻזו圫ղז꬗ד⮚⡘䚍؝ٝػ؎ٕ鹼ְֽו˘ 倜鋉فٗآؙؑزד֮׸לծקר䱰欽ׁ׸׷ךכ4XJGU׌ה䙼ֲ

  13. 13 (PPHMF5SFOETַ׵׫׷0CKFDUJWF$ה4XJGU

  14. 14 *OEFFEך実➂ַ׵׫׷0CKFDUJWF$ה4XJGU 0CKFDUJWF$ ⟝ 4XJGU ⟝

  15. 15 植㜥דכ0CKFDUJWF$ָ⢪׻׸גְ׷

  16. 16 ז׈0CKFDUJWF$כזֻז׵זְךַ 4XJGUךفٗآؙؑزח׮0CK$ךٓ؎ـָٓٔת׌⢪׻׸גְ׷ 瀉劍涸ؽآطأ涸錁挿ַ׵،فٔ׾4XJGUדأؙٓحثꟚ涪ׅ׷ךח鬣鬝׃גְ׷ 4XJGUכײה׶0CK$ֿ׉荚넝

  17. 17 ؿٕ4XJGUח׃׋ְֽוծ➬✲דכי˘

  18. 18 傈穗ꨵ㶨晛،فٔ׮׉ך♧א 88%$ד4XJGUָ涪邌ׁ׸׋קרず儗劍חꟚ涪أة٦ز 䔲儗כ㸜㹀䚍׾罋䣁ծ0CKFDUJWF$׾鼅䫛

  19. 19 傈穗ꨵ㶨晛،فٔꟚ涪ך䬐䔲חז׷ 䎃ך猧갦ַ׵傈穗ꨵ㶨晛،فٔ׾䬐䔲ׅ׷״ֲחז׷ ،فٔכׅדח䧭擾׃גְגծ 遤קוךفٗتؙزחז׏גְ׷

  20. 20 4XJGU獳遤׾䲿周 0CKFDUJWF$׾剅ֻ✲ָ鳞ְהְֲך׮֮׷ָ˘ 4XJGU׾⢪ֲ✲ךًٔحزָ㣐ְֹ 4XJGUה0CKFDUJWF$׾Ⱏ㶷ׇׁג剅ֻךכ׉׿זח㣐㢌דכזְה耀ְ׋

  21. 21 ֻׁ׏ה獳遤כׄ׭׷ַ

  22. 22 הְֲ鏬חכְֹתׇ׿ד׃׋˘

  23. 23 4XJGU獳遤ד䠬ׄ׋挿װ5JQTזו׾ 涪邌׃תׅ

  24. 24 4XJGU獳遤ך倯ꆙ

  25. 25 4XJGU獳遤ך倯ꆙ 4XJGU̞0CKFDUJWF$ػة٦ٝ 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ 4XJGUأؙٓحثꟚ涪ػة٦ٝ

  26. 26 4XJGU̞0CKFDUJWF$ػة٦ٝ

  27. 27 4XJGU̞0CKFDUJWF$ػة٦ٝ 0CKFDUJWF$ד剅ְ׋؝٦س׮4XJGUַ׵ㄎן⳿ׇ׷״ֲׅ׷ 湱✼✼䳔䚍׾㸚׏ג剅ֻ 4XJGUד剅ְ׋؝٦س׾0CKFDUJWF$ַ׵ㄎן⳿ׇ׷״ֲׅ׷

  28. 28 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 TUSVDU׾⢪欽ׇ׆ծDMBTTך׫⾱⵱ה׃ג⢪欽 FOVNծHFOFSJDTזוכ⾱⵱ה׃ג⢪欽׃זְ 0CK$ךًاحسךㄏせ鋉⵱׾㸚׷ 0CK$ך؎ٝة٦ؿؑ٦أח،ظذ٦ءّٝ׾אֽ׷ #PYػة٦ٝװ5ZQF&BTVSF׾⢪ֲ

  29. 29 TUSVDU׾⢪欽ׇ׆ծDMBTTך׫׾⢪欽 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 @objc class User: NSObject { let name:

    String var email: String? = nil init(name: String) { super.init() self.name = name } } /40CKFDU׾竰䪫ׅ׷䗳銲ָ֮׷
  30. 30 0CK$ך؎ٝة٦ؿؑ٦أח،ظذ٦ءّٝ׾אֽ׷ 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 @interface User : NSObject @property (nonnull, nonatomic,

    readonly, copy) NSString *name; @property (nullable, nonatomic, copy) NSString *email; - (nonnull instancetype)initWithName:(nonnull NSString *)name; - (nonnull instancetype)init; @end let user = User(name: "hogehoge") user.email = "test@test.com" print("\(user.name) \(user.email ?? "no email")") // hogehoge test@test.com
  31. 31 0CK$ךًاحسךㄏせ鋉⵱׾㸚׷ 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 - (void)authenticateWithPassword:(nonnull NSString *)password; func authenticate(password: String)

    农럀涸חًاحسせָ㢌刿ׁ׸׷ #FUUFS5SBOTMBUJPOPG0CKFDUJWF$"1*T*OUP4XJGU IUUQTHJUIVCDPNBQQMFTXJGUFWPMVUJPOCMPCNBTUFSQSPQPTBMTPCKFDUJWFDOBNFUSBOTMBUJPONE
  32. 32 #PYػة٦ٝ 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 0CK$⩎ؙٓأחFYUFOTJPOדTUSVDUװFOVNךًٝس㢌侧׾➰♷׃׋ְ 㘗׾#PYהְֲDMBTTדٓحفׅ׷✲ד0CK$⩎ַ׵כDMBTT׃ַ鋅ִזְ

  33. 33 #PYػة٦ٝ 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 @interface LegacyViewController : UIViewController @property (readwrite, strong)

    id /* Box<User> */ _user; @end extension LegacyViewController { var user: User { get { return (self._user as! Box<User>).value } set { self._user = Box<User>(newValue) } } } struct User {}
  34. 34 5ZQF&BTVSF 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 0CK$ַ׵כ4XJGUך(FOFSJDT׾⢪׏׋㘗׾⢪欽ׅ׷ֿהָדֹזְ (FOFSJDTך㘗׾嶊⿠ׅ׷✲ד0CK$⩎ה✼䳔䚍׾⥂אֿהָדֹ׷ 0CK$פךـٔحآ׾⡲䧭ׅ׷ךח⢪ִ׷

  35. 35 5ZQF&BTVSF 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 struct Section<Item> { let items: [Item] }

    class UserCollectionViewController: UIViewController { typealias Item = User var section: Section<Item> init(section: Section<Item>) { self.section = section super.init(nibName: nil, bundle: nil) } } 0CK$⩎ַ׵כTFDUJPOח،ؙإأדֹזְ
  36. 36 5ZQF&BTVSF 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 extension Section where Item: Any { var

    anySection: AnySection { return AnySection(self) } } @objc class AnySection: NSObject { var items: [Any] init<Item: Any>(_ section: Section<Item>) { self.items = section.items } } "OZ4FDUJPOהְֲDMBTT׾欰䧭ׅ׷
  37. 37 5ZQF&BTVSF 湱✼✼䳔䚍׾䠐陎׃׋剅ֹ倯 class UserCollectionViewController: UIViewController { typealias Item =

    User var section: Section<Item> @objc var _section: AnySection { return self.section.anySection } init(section: Section<Item>) { self.section = section super.init(nibName: nil, bundle: nil) } } 0CK$⩎ַ׵כWD@TFDUJPOד،ؙإأדֹ׷
  38. 38 NYDM1SPNJTF,JUד⢪欽ׁ׸גְ׷

  39. 39 4XJGU̞0CKFDUJWF$ػة٦ٝ ًٔحز ずׄ堣腉׾✳ꅾꟚ涪׾׃זֻג幥׬ 鏣鎘ח㣐ֹז䕦갟׾♷ִזְ

  40. 40 4XJGU̞0CKFDUJWF$ػة٦ٝ ًٔحز 4XJGU堣腉׾ؿٕח⢪欽ׅ׷ֿהָꨇ׃ְ رًٔحز ✼䳔䚍ך⥂׏׋剅ֹ倯׾嫣㔐ׅ׷✲ָ鳞ְ 9DPEFך酡㸣堣腉ח蕱׃׬湱✼⿫撑ָ鳞ְ ⣛㶷ꟼ⤘׾罋ִזְהؽٕس儗꟦ח蕱׃׬

  41. 41 9DPEFך酡㸣堣腉ח蕱׃׬湱✼⿫撑ָ鳞ְ 4XJGUד剅ְ׋؝٦س׾0CK$⩎ד⢪ֲ儗鷞׮搫׶ח酡㸣堣腉ד蕱׃׬ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز SWIFT_CLASS("_TtC11ProductName4User") @interface User : NSObject @property

    (nonatomic, readonly, copy) NSString * _Nonnull name; @property (nonatomic, copy) NSString * _Nullable email; - (nonnull instancetype)initWithName:(NSString * _Nonnull)name OBJC_DESIGNATED_INIT… - (void)authenticateWithPassword:(NSString * _Nonnull)password; - (nonnull instancetype)init SWIFT_UNAVAILABLE; @end ProductName-Swift.h ؎ٝة٦ؿؑ٦أָ刿倜ׁ׸זְה酡㸣ָ⸬ַזְ
  42. 42 9DPEFך酡㸣堣腉ח蕱׃׬湱✼⿫撑ָ鳞ְ ♧䏝1SPEVDU/BNF4XJGUIؽٕس׾⡲䧭׃זְה酡㸣ָ⸬ַזְ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز ProductName-Swift.h

  43. 43 ⣛㶷ꟼ⤘׾罋ִזְהؽٕس儗꟦ח蕱׃׬ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A

    Class B Class
  44. 44 ⣛㶷ꟼ⤘׾罋ִזְהؽٕس儗꟦ח蕱׃׬ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A

    Class B Class 㢌刿֮׶
  45. 45 ⣛㶷ꟼ⤘׾罋ִזְהؽٕس儗꟦ח蕱׃׬ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A

    Class B Class 㢌刿֮׶ 㢌刿֮׶ ⱄؽٕس 兛鸐ז׵ֲֿז׷כ׆
  46. 46 ⣛㶷ꟼ⤘׾罋ִזְהؽٕس儗꟦ח蕱׃׬ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A

    Class B Class 㢌刿֮׶ 㢌刿֮׶ ⱄؽٕس 㢌刿֮׶ 㹋ꥷכ˘ ⱄؽٕس
  47. 47 ⣛㶷ꟼ⤘׾罋ִזְהؽٕس儗꟦ח蕱׃׬ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز QSJWBUFדזְ4XJGUךؙٓأכⰋג⽃♧ך؎ٝة٦ؿؑ٦أחⰕꟚׁ׸ג׃תֲ 䊴ⴓؽٕسָⰋֻ⸬ַזֻז׷הְֲ䛊׹׃ְ✲䡾חז׷ 4XJGUךؙٓأ׾剅ֹ䳔ִ׷הծ⣛㶷ꟼ⤘חꟼ⤘זְؙٓأתד䕦갟׾「ֽ׷

  48. 48 ⣛㶷ꟼ⤘׾罋ִזְהؽٕس儗꟦ח蕱׃׬ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A

    Class B Class ProductName-Swift.h 劤䔲ך⣛㶷ꟼ⤘כֿך״ֲחז׏גְ׷
  49. 49 ⣛㶷ꟼ⤘׾罋ִזְהؽٕس儗꟦ח蕱׃׬ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU A Class B

    Class ProductName-Swift.h K Class F Class C Class K Class F Class C Class K Class C Class ׮׃׋ֻׁ׿֮׏׋׵˘
  50. 50 չ4XJGU̞0CKFDUJWF$ػة٦ٝպפך罋㻊 4XJGU⩎ךة٦؜حز׾ⴓֽ׷הְֲ䩛岀׮֮׷ 4XJGU̞0CKFDUJWF$׾䱰欽ׅ׷ך׾镘׭׷ 4XJGUח剅ֹ湫ׅךכ⣛㶷眔㔲ך㼰זְ7JFXזוךؙٓأַ׵剑ⴱח《׶䱦ַ׷ ׮׃鍑寸瘻֮׏׋׵侄ִגֻ׌ְׁ

  51. 51 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ

  52. 52 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ 湱✼✼䳔䚍ך֮׷Ꟛ涪כؗخ؎ 倜׃ְ堣腉٥歗꬗׾4XJGUד剅ֹծ䗳銲ז堣腉כ0CK$ך项欵׾ⵃ欽ـٔحآ⡲䧭 4XJGU⩎׾䖚ղח㣐ֹֻ׃גծ剅ֹ湫׃גְֻ 4XJGU̒0CKFDUJWF$ך罋ִכ䰍ג׷

  53. 53 䖚ղח4XJGUBQQ⩎׾㣐ֹֻ׃גְֻ 0CK$BQQ 4XJGUBQQ

  54. 54 䖚ղח4XJGUBQQ⩎׾㣐ֹֻ׃גְֻ 0CK$BQQ 4XJGUBQQ

  55. 55 䖚ղח4XJGUBQQ⩎׾㣐ֹֻ׃גְֻ 0CK$BQQ 4XJGUBQQ

  56. 56 :BIPPءّحؾؚٝך✲⢽ IUUQTUFDICMPHZBIPPDPKQJPTTXJGUGSPNPCKD

  57. 57 :BIPPءّحؾؚٝך✲⢽ IUUQTUFDICMPHZBIPPDPKQJPTTXJGUGSPNPCKD

  58. 58 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ ًٔحز 4XJGUך堣腉׾ؿٕד⢪ִ׷ ✼䳔䚍䬐⥂ח״׷撕׻׃ַׁ׵鍑佝ׁ׸׷ 4XJGU⩎ך鏣鎘׾倜׃ֻ罋ִ׷ֿהָדֹ׷ٖؖء٦膴⽱

  59. 59 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ ًٔحز ♧鿇ծ✳ꅾꟚ涪׾遤ֲ䗳銲֮׷皘䨽ָ⳿ג勻׷〳腉䚍ָ֮׷ رًٔحز 鏣鎘ָⰋֻ麩ֲ؝٦سָず♧فٗآؙؑزⰻח幉㖈 ♳䩛ח獳遤鏣鎘׃זְה䄶㠨ׅ׷

  60. 60 չ4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝպפך罋㻊 ׃ַ׃0CK$ך؝٦س׾剅ֹ湫ٌׅثك٦ءّٝ׾⥂ג׷ַ 穠㽷ծ倜׃ְ堣腉׌ֽ4XJGUד㹋鄲ׁ׸גְ׷הְֲ✲䡾חז׶ָ׍ ؽآطأ涸錁挿ַ׵鋅ג׮غٓٝأך《׸׋倯岀 ֲתֻ獳遤鏣鎘׃זְהծ4XJGU̞0CKFDUJWF$ػة٦ٝדꤒ׏׋رًٔحزחعو׷

  61. 61 4XJGUأؙٓحثꟚ涪ػة٦ٝ

  62. 62 4XJGUأؙٓحثꟚ涪ػة٦ٝ 〢ְ项欵כⰋג䰍ג׷ 4XJGUד倜׃ְفٗتؙز׾⡲䧭ׅ׷ Ꟛ涪ָأزحفׅ׷ךכת׆ְךדծ〢ְ项欵׮ًٝذ׾ׅ׷

  63. 63 4XJGUأؙٓحثꟚ涪ػة٦ٝ 0CK$ 4XJGU      

     縧ֹ䳔ִ 
  64. 64 4XJGUأؙٓحثꟚ涪ػة٦ٝ ًٔحز 4XJGUך堣腉׾ؿٕד⢪ִ׷ 䪮遭涸頾⫈׾Ⰻג鵤幥דֹ׷ 剅ֹ䳔ִ䖓ָ♧殢⸬卓֮׶ ꞿ劍涸鋔挿חְֶגًٔحز֮׶

  65. 65 4XJGUأؙٓحثꟚ涪ػة٦ٝ ًٔحز 傈ղך何㊣鸞䏝׾⡚♴ׇׁג׃תֲ رًٔحز 瀉劍涸זؽآطأ涸זًٔحز謬ְ 剅ֹ䳔ִתדָהחַֻ㣐㢌

  66. 66 չ4XJGUأؙٓحثꟚ涪ػة٦ٝպפך罋㻊 غحؙؒٝسךⵗ倜 ،فٔٔصُ٦،ٕ ة؎ىִׁؚ֮ٝ׸לծדֹ׷〳腉䚍ָ֮׷

  67. 67 碛㕂ך倜耀爡ך⢽ J1IPOFהJ1BE׾،فٔ׾4XJGUד剅ֹ湫׃׋ 傀㶷،فٔך堣腉Ꟛ涪כ♧ⴖ׃זַ׏׋ ؝٦سك٦أך㢌刿ך׫ رؠ؎ٝ٥堣腉כ♧ⴖ㢌刿ז׃ 

  68. 68 碛㕂ך倜耀爡ך⢽ 䪮遭涸頾⫈כ穠卓涸חِ٦ؠ٦ח䕦갟׾♷ִ׷ ٖؖء٦؝٦سכ儗꟦ַַָ׷ٔٔ٦أ䖓כ⦓鸞ֻ ركٗحػ٦ث٦يך㡦孡׾鯪ֻ鋅זְ 

  69. 69 傈穗ך㜥さ

  70. 70 傈穗ך㜥さ   ➂剢ⴓך珩⫴ָ《׸׷朐屣ח֮׏׋何㊣הأؙٓحثꟚ涪׾⚛遤דֹ׷ ׍׳ֲוغحؙؒٝسⵗ倜ך鑧ָ֮׏׋ 椚鍑֮׷♳぀ח䜋ת׸׋ ➙䖓ך傈穗׾䬐ֲ،فٔזךדծꞿ劍涸鋔挿דךꟚ涪٥何㊣ָ䗳銲

  71. 71 傈穗ך㜥さ 4XJGU̞0CKFDUJWF$ػة٦ٝ׾䱰欽 رًٔحزך倯ָ㢳ְ✲ח孡ָאֻ غحؙؒٝسⵗ倜ך鑧 4XJGUأؙٓحثꟚ涪ػة٦ٝפה遤ֹ滠ֻ

  72. 72 4XJGUأؙٓحثꟚ涪ך׋׭ח遤ֲ➙䖓ةأؙ ぐ歗꬗ךꟚ涪䊨侧׾峤ְ⳿ׅ 傀㶷ךؕ؎ئٝחוך玎䏝׾䕦갟ָ⳿׷ךַ ְא갦תדח縧ֹ䳔ִָדֹ׷ךַ

  73. 73 תה׭

  74. 74 穠㽷ו׸ְְָך 4XJGU̞0CKFDUJWF$ػة٦ٝכ㼰׃ؗخ؎ ת׆荈ⴓך،فָٔ縧ַ׸׋朐屣׾然钠ׅ׷ ،فٔך鋉垷ծ⡦➂剢然⥂דֹ׷ךַծ植،فٔך㸜㹀䚍ծ׉ך➭酅✲䞔

  75. 75 䪮遭涸ꨇ僒䏝 4XJGUأؙٓحثꟚ涪ػة٦ٝ חⴓָ֮׷

  76. 76 瀉劍涸זؽآطأ꬗דךًٔحز 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝחⴓָ֮׷

  77. 77 ꞿ劍涸זؽآطأ꬗דךًٔحز 4XJGUأؙٓحثꟚ涪ػة٦ٝ חⴓָ֮׷

  78. 78 ⿫罋63- 傀㶷ך0CKFDUJWF$،فٔ؛٦ءّٝ׾4XJGUד剅ֹ䳔ִ׋鑧 IUUQUFDIMJGFDPPLQBEDPNFOUSZ "NFCB،فٔ0CKFDUJWF$ַ׵4XJGUפך獳遤 IUUQBNFCMPKQDBQJYFMFOUSZIUNM 4XJGUPOUIF0CK$TIJCVZBTXJGU IUUQTTQFBLFSEFDLDPNBJOBNFTXJGUPOUIFPCKDOVNCFSTIJCVZBTXJGU 'FFUJO#PUI8PSMET'SPN0CKFDUJWF$UP4XJGU IUUQTXXXZPVUVCFDPNXBUDI

    WR@:7"1D
  79. 79 ֶ׻׶%