Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Objective-CからSwift移行を始めて感じた事/ObjC-to-Swift
Taketo Yoshida
January 17, 2017
Programming
1
1.2k
Objective-CからSwift移行を始めて感じた事/ObjC-to-Swift
https://supporterz-seminar.connpass.com/event/47574/
で発表した資料
Taketo Yoshida
January 17, 2017
Tweet
Share
More Decks by Taketo Yoshida
See All by Taketo Yoshida
Beautiful Japanese line break for the Web
tamanyan
1
59
新しい画像フォーマットHEIFを 用いたiOSアプリの通信量削減/iosdc-heif
tamanyan
9
5.4k
Source Code Generator for Team Development/code-generator-for-team-development
tamanyan
0
1.4k
How to Design Great Alerts/how-to-design-great-alerts
tamanyan
0
350
iOSエンジニアがReact-Nativeに触れてみた/ios-developer-react-native
tamanyan
0
350
フォーシームのスピン量とその効果/the-effect-of-fourseam-fastball-spin-rate
tamanyan
1
680
Modern and Practical Networking in Swift
tamanyan
2
650
まだJPEGで消耗してるの?/iOSDC-Reject-Conference
tamanyan
0
2.8k
SwiftでWebPを使ってみた/melon-swift-webp
tamanyan
1
910
Other Decks in Programming
See All in Programming
NEWT.net: Frontend Technology Selection
xpromx
0
250
#JJUG_CCC 「サポート」は製品開発? - JDBCライブラリ屋さんが実践する攻めのテクニカルサポートとJavaエンジニアのキャリアについて -
cdataj
0
420
Java アプリとAWS の良い関係 - AWS でJava アプリを実行する一番簡単な方法教えます / AWS for Javarista
kanamasa
2
1.2k
Get Ready for Jakarta EE 10
ivargrimstad
0
610
Let's keep Commodore 64 alive for the next 40 years
mehowte
1
110
Running Laravel/PHP on AWS (AWS Builders Day Taiwan 2022)
dwchiang
0
150
git on intellij
hiroto_kitamura
0
170
Java初心者が知っておくべきプログラミングのこと - JJUG CCC 2022 Spring
kishida
5
550
Jetpack Composeでの画面遷移
iwata_n
0
170
[월간 데이터리안 세미나 6월] 스스로 성장하는 분석가 커리어 이야기
datarian
0
220
リアルタイムボイスチェンジャーMMVCとVITSの紹介
stealthinu
0
100
模組化的Swift架構(二) DDD速成
haifengkao
0
390
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
499
110k
The Web Native Designer (August 2011)
paulrobertlloyd
74
1.9k
Automating Front-end Workflow
addyosmani
1351
200k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
119
28k
A designer walks into a library…
pauljervisheath
196
16k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
19
1.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
151
13k
The World Runs on Bad Software
bkeepers
PRO
57
5.3k
Typedesign – Prime Four
hannesfritz
34
1.4k
Side Projects
sachag
450
37k
Why Our Code Smells
bkeepers
PRO
324
55k
The Mythical Team-Month
searls
209
39k
Transcript
1 0CKFDUJWF$ַ4XJGU獳遤㨣ג 䠬ׄ✲ 5BLFUP:PTIJEB傈劤穗幥倜耀爡 ؟ه٦ة٦ؤ⹈䓼⠓ _չ傈穗ꨵ㶨晛،فٔպךٖؖء٦؝٦س何㊣ׅ_
2 荈䊹稱➜ し歊⨳➂ :PTIJEB5BLFUP (JUIVCUBNBOZBO 傈劤穗幥倜耀爡ךJ04ؒٝآص، 莆ꅿ椔ծ⨳䏿ծ匌⽂،آ، 䞔㜠䊨㷕禸ך㣐㷕ꤍ⼼噟䖓䎃ח傈穗חⰅ爡
3 傈穗הכ 倜耀 ꧟钞 佝鷏 ر٦ة ؎ٝرحؙأ
4 傈劤穗幥倜耀הכ 傈穗ךً؎ٝفٗتؙز 䎃僇屚䎃ⶼⴚ 劉ⴚכ♰鿇涪遤
5 傈穗ꨵ㶨晛הכ 䎃剢ⶼⴚ 剢،ؙإأ⭙⟝ 嫣傈秈劤ך鎸✲ꂁ⥋ 1$٥ٌغ؎ٕ؟؎زծJ04٥"OESPJE،فٔ 剣俱⠓㆞ ⰼ剢 秈♰➂
搀俱⠓㆞秈♰➂ ꬊ涫ꐮ秈♰6#
6 傈穗ꨵ㶨晛ךⰻ醡涪חאְג 䎃剢ַⰻ醡涪فٗآؙؑزָ㨣⹛ 爡ⰻךث٦ي⡤ⵖך㢌刿 خ٦ٕ㼪Ⰵ4MBDL (JUIVC 2JJUB5FBNזו 倜⼼٥⚥鷿䱰欽ך何㊣
7 劤傈ךכגעךذؙظٗآ٦ؒٝزٔ٦
8 傈穗ꨵ㶨晛،فٔ 䎃剢ٔٔ٦أ 傈穗ⴱךⰻ醡涪ךJ04،فٔ 涪鎉铂כ0CKFDUJWF$
9 秵ؽُ٦،٦،فٔ 䎃剢ٔٔ٦أ 涪鎉铂כ4XJGU 猘ָ倜Ⰵ爡㆞ך儗ח涪׃،فٔ
10 植㖈ךJ04ث٦ي⡤ⵖ J04ؒٝآص، فٗآؙؑزوط٦آٍ٦ 㢩鿇ךJ04ؒٝآص،
11 כׄח
12 4XJGU涫㜥ַ♲䎃 ؔ٦فٝا٦أ⻉֮גծ鑧겗כ0CKFDUJWF$ַ4XJGUח 涪⸬桦ծ؟ه٦زծ㘗㸜Ⰻזו圫ղזד⮚⡘䚍؝ٝػ؎ٕ鹼ְֽו˘ 倜鋉فٗآؙؑزד֮לծקר䱰欽ׁךכ4XJGUה䙼ֲ
13 (PPHMF5SFOETַ0CKFDUJWF$ה4XJGU
14 *OEFFEך実➂ַ0CKFDUJWF$ה4XJGU 0CKFDUJWF$ ⟝ 4XJGU ⟝
15 植㜥דכ0CKFDUJWF$ָ⢪גְ
16 ז0CKFDUJWF$כזֻזזְךַ 4XJGUךفٗآؙؑزח0CK$ךٓ؎ـָٓٔת⢪גְ 瀉劍涸ؽآطأ涸錁挿ַ،فٔ4XJGUדأؙٓحث涪ׅךח鬣鬝׃גְ 4XJGUכײה0CK$ֿ荚넝
17 ؿٕ4XJGUח׃ְֽוծ➬✲דכי˘
18 傈穗ꨵ㶨晛،فٔך♧א 88%$ד4XJGUָ涪邌ׁקרず儗劍ח涪أة٦ز 䔲儗כ㸜㹀䚍罋䣁ծ0CKFDUJWF$鼅䫛
19 傈穗ꨵ㶨晛،فٔ涪ך䬐䔲חז 䎃ך猧갦ַ傈穗ꨵ㶨晛،فٔ䬐䔲ׅ״ֲחז ،فٔכׅדח䧭擾׃גְגծ 遤קוךفٗتؙزחזגְ
20 4XJGU獳遤䲿周 0CKFDUJWF$剅ֻ✲ָ鳞ְהְֲךָ֮˘ 4XJGU⢪ֲ✲ךًٔحزָ㣐ְֹ 4XJGUה0CKFDUJWF$Ⱏ㶷ׇׁג剅ֻךכזח㣐㢌דכזְה耀ְ
21 ֻׁה獳遤כַׄ
22 הְֲ鏬חכְֹתׇד׃˘
23 4XJGU獳遤ד䠬ׄ挿װ5JQTזו 涪邌׃תׅ
24 4XJGU獳遤ך倯ꆙ
25 4XJGU獳遤ך倯ꆙ 4XJGU̞0CKFDUJWF$ػة٦ٝ 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ 4XJGUأؙٓحث涪ػة٦ٝ
26 4XJGU̞0CKFDUJWF$ػة٦ٝ
27 4XJGU̞0CKFDUJWF$ػة٦ٝ 0CKFDUJWF$ד剅ְ؝٦س4XJGUַㄎן⳿ׇ״ֲׅ 湱✼✼䳔䚍㸚ג剅ֻ 4XJGUד剅ְ؝٦س0CKFDUJWF$ַㄎן⳿ׇ״ֲׅ
28 湱✼✼䳔䚍䠐陎׃剅ֹ倯 TUSVDU⢪欽ׇ׆ծDMBTTך⾱ה׃ג⢪欽 FOVNծHFOFSJDTזוכ⾱ה׃ג⢪欽׃זְ 0CK$ךًاحسךㄏせ鋉㸚 0CK$ך؎ٝة٦ؿؑ٦أח،ظذ٦ءّٝאֽ #PYػة٦ٝװ5ZQF&BTVSF⢪ֲ
29 TUSVDU⢪欽ׇ׆ծDMBTTך⢪欽 湱✼✼䳔䚍䠐陎׃剅ֹ倯 @objc class User: NSObject { let name:
String var email: String? = nil init(name: String) { super.init() self.name = name } } /40CKFDU竰䪫ׅ䗳銲ָ֮
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 0CK$ךًاحسךㄏせ鋉㸚 湱✼✼䳔䚍䠐陎׃剅ֹ倯 - (void)authenticateWithPassword:(nonnull NSString *)password; func authenticate(password: String)
农럀涸חًاحسせָ㢌刿ׁ #FUUFS5SBOTMBUJPOPG0CKFDUJWF$"1*T*OUP4XJGU IUUQTHJUIVCDPNBQQMFTXJGUFWPMVUJPOCMPCNBTUFSQSPQPTBMTPCKFDUJWFDOBNFUSBOTMBUJPONE
32 #PYػة٦ٝ 湱✼✼䳔䚍䠐陎׃剅ֹ倯 0CK$⩎ؙٓأחFYUFOTJPOדTUSVDUװFOVNךًٝس㢌侧➰♷׃ְ 㘗#PYהְֲDMBTTדٓحفׅ✲ד0CK$⩎ַכDMBTT׃ַ鋅ִזְ
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 5ZQF&BTVSF 湱✼✼䳔䚍䠐陎׃剅ֹ倯 0CK$ַכ4XJGUך(FOFSJDT⢪㘗⢪欽ֿׅהָדֹזְ (FOFSJDTך㘗嶊ׅ✲ד0CK$⩎ה✼䳔䚍⥂אֿהָדֹ 0CK$פךـٔحآ⡲䧭ׅךח⢪ִ
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 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 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 NYDM1SPNJTF,JUד⢪欽ׁגְ
39 4XJGU̞0CKFDUJWF$ػة٦ٝ ًٔحز ずׄ堣腉✳ꅾ涪׃זֻג幥 鏣鎘ח㣐ֹז䕦갟♷ִזְ
40 4XJGU̞0CKFDUJWF$ػة٦ٝ ًٔحز 4XJGU堣腉ؿٕח⢪欽ֿׅהָꨇ׃ְ رًٔحز ✼䳔䚍ך⥂剅ֹ倯嫣㔐ׅ✲ָ鳞ְ 9DPEFך酡㸣堣腉ח蕱׃湱✼撑ָ鳞ְ ⣛㶷ꟼ⤘罋ִזְהؽٕس儗ח蕱׃
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 9DPEFך酡㸣堣腉ח蕱׃湱✼撑ָ鳞ְ ♧䏝1SPEVDU/BNF4XJGUIؽٕس⡲䧭׃זְה酡㸣ָ⸬ַזְ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز ProductName-Swift.h
43 ⣛㶷ꟼ⤘罋ִזְהؽٕس儗ח蕱׃ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A
Class B Class
44 ⣛㶷ꟼ⤘罋ִזְהؽٕس儗ח蕱׃ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A
Class B Class 㢌刿֮
45 ⣛㶷ꟼ⤘罋ִזְהؽٕس儗ח蕱׃ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A
Class B Class 㢌刿֮ 㢌刿֮ ⱄؽٕس 兛鸐זֲֿזכ׆
46 ⣛㶷ꟼ⤘罋ִזְהؽٕس儗ח蕱׃ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A
Class B Class 㢌刿֮ 㢌刿֮ ⱄؽٕس 㢌刿֮ 㹋ꥷכ˘ ⱄؽٕس
47 ⣛㶷ꟼ⤘罋ִזְהؽٕس儗ח蕱׃ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز QSJWBUFדזְ4XJGUךؙٓأכⰋג⽃♧ך؎ٝة٦ؿؑ٦أחⰕׁג׃תֲ 䊴ⴓؽٕسָⰋֻ⸬ַזֻזהְֲ䛊׃ְ✲䡾חז 4XJGUךؙٓأ剅ֹ䳔ִהծ⣛㶷ꟼ⤘חꟼ⤘זְؙٓأתד䕦갟「ֽ
48 ⣛㶷ꟼ⤘罋ִזְהؽٕس儗ח蕱׃ 4XJGU̞0CKFDUJWF$ػة٦ٝךرًٔحز C Class 0CKFDUJWF$ 4XJGU D Class A
Class B Class ProductName-Swift.h 劤䔲ך⣛㶷ꟼ⤘כֿך״ֲחזגְ
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 չ4XJGU̞0CKFDUJWF$ػة٦ٝպפך罋㻊 4XJGU⩎ךة٦حزⴓֽהְֲ䩛岀֮ 4XJGU̞0CKFDUJWF$䱰欽ׅך镘 4XJGUח剅ֹ湫ׅךכ⣛㶷眔㔲ך㼰זְ7JFXזוךؙٓأַ剑ⴱח《䱦ַ ׃鍑寸瘻֮侄ִגְֻׁ
51 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ
52 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ 湱✼✼䳔䚍ך֮涪כؗخ؎ 倜׃ְ堣腉٥歗4XJGUד剅ֹծ䗳銲ז堣腉כ0CK$ך项欵ⵃ欽ـٔحآ⡲䧭 4XJGU⩎䖚ղח㣐ֹֻ׃גծ剅ֹ湫׃גְֻ 4XJGU̒0CKFDUJWF$ך罋ִכ䰍ג
53 䖚ղח4XJGUBQQ⩎㣐ֹֻ׃גְֻ 0CK$BQQ 4XJGUBQQ
54 䖚ղח4XJGUBQQ⩎㣐ֹֻ׃גְֻ 0CK$BQQ 4XJGUBQQ
55 䖚ղח4XJGUBQQ⩎㣐ֹֻ׃גְֻ 0CK$BQQ 4XJGUBQQ
56 :BIPPءّحؾؚٝך✲⢽ IUUQTUFDICMPHZBIPPDPKQJPTTXJGUGSPNPCKD
57 :BIPPءّحؾؚٝך✲⢽ IUUQTUFDICMPHZBIPPDPKQJPTTXJGUGSPNPCKD
58 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ ًٔحز 4XJGUך堣腉ؿٕד⢪ִ ✼䳔䚍䬐⥂ח״撕׃ַׁ鍑佝ׁ 4XJGU⩎ך鏣鎘倜׃ֻ罋ִֿהָדֹٖؖء٦膴⽱
59 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝ ًٔحز ♧鿇ծ✳ꅾ涪遤ֲ䗳銲֮皘䨽ָ⳿ג勻〳腉䚍ָ֮ رًٔحز 鏣鎘ָⰋֻ麩ֲ؝٦سָず♧فٗآؙؑزⰻח幉㖈 ♳䩛ח獳遤鏣鎘׃זְה䄶㠨ׅ
60 չ4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝպפך罋㻊 ׃ַ׃0CK$ך؝٦س剅ֹ湫ٌׅثك٦ءّٝ⥂גַ 穠㽷ծ倜׃ְ堣腉ֽ4XJGUד㹋鄲ׁגְהְֲ✲䡾חזָ ؽآطأ涸錁挿ַ鋅גغٓٝأך《倯岀 ֲתֻ獳遤鏣鎘׃זְהծ4XJGU̞0CKFDUJWF$ػة٦ٝדꤒرًٔحزחعو
61 4XJGUأؙٓحث涪ػة٦ٝ
62 4XJGUأؙٓحث涪ػة٦ٝ 〢ְ项欵כⰋג䰍ג 4XJGUד倜׃ְفٗتؙز⡲䧭ׅ 涪ָأزحفׅךכת׆ְךדծ〢ְ项欵ًٝذׅ
63 4XJGUأؙٓحث涪ػة٦ٝ 0CK$ 4XJGU
縧ֹ䳔ִ
64 4XJGUأؙٓحث涪ػة٦ٝ ًٔحز 4XJGUך堣腉ؿٕד⢪ִ 䪮遭涸頾⫈Ⰻג鵤幥דֹ 剅ֹ䳔ִ䖓ָ♧殢⸬卓֮ ꞿ劍涸鋔挿חְֶגًٔحز֮
65 4XJGUأؙٓحث涪ػة٦ٝ ًٔحز 傈ղך何㊣鸞䏝⡚♴ׇׁג׃תֲ رًٔحز 瀉劍涸זؽآطأ涸זًٔحز謬ְ 剅ֹ䳔ִתדָהחַֻ㣐㢌
66 չ4XJGUأؙٓحث涪ػة٦ٝպפך罋㻊 غحؙؒٝسךⵗ倜 ،فٔٔصُ٦،ٕ ة؎ىִׁؚ֮ٝלծדֹ〳腉䚍ָ֮
67 碛㕂ך倜耀爡ך⢽ J1IPOFהJ1BE،فٔ4XJGUד剅ֹ湫׃ 傀㶷،فٔך堣腉涪כ♧ⴖ׃זַ ؝٦سك٦أך㢌刿ך رؠ؎ٝ٥堣腉כ♧ⴖ㢌刿ז׃
68 碛㕂ך倜耀爡ך⢽ 䪮遭涸頾⫈כ穠卓涸חِ٦ؠ٦ח䕦갟♷ִ ٖؖء٦؝٦سכ儗ַַָٔٔ٦أ䖓כ⦓鸞ֻ ركٗحػ٦ث٦يך㡦孡鯪ֻ鋅זְ
69 傈穗ך㜥さ
70 傈穗ך㜥さ ➂剢ⴓך珩⫴ָ《朐屣ח֮何㊣הأؙٓحث涪⚛遤דֹ ׳ֲוغحؙؒٝسⵗ倜ך鑧ָ֮ 椚鍑֮♳ח䜋ת ➙䖓ך傈穗䬐ֲ،فٔזךדծꞿ劍涸鋔挿דך涪٥何㊣ָ䗳銲
71 傈穗ך㜥さ 4XJGU̞0CKFDUJWF$ػة٦ٝ䱰欽 رًٔحزך倯ָ㢳ְ✲ח孡ָאֻ غحؙؒٝسⵗ倜ך鑧 4XJGUأؙٓحث涪ػة٦ٝפה遤ֹ滠ֻ
72 4XJGUأؙٓحث涪ךח遤ֲ➙䖓ةأؙ ぐ歗ך涪䊨侧峤ְ⳿ׅ 傀㶷ךؕ؎ئٝחוך玎䏝䕦갟ָ⳿ךַ ְא갦תדח縧ֹ䳔ִָדֹךַ
73 תה
74 穠㽷וְְָך 4XJGU̞0CKFDUJWF$ػة٦ٝכ㼰׃ؗخ؎ ת׆荈ⴓך،فָٔ縧ַ朐屣然钠ׅ ،فٔך鋉垷ծ⡦➂剢然⥂דֹךַծ植،فٔך㸜㹀䚍ծך➭酅✲䞔
75 䪮遭涸ꨇ僒䏝 4XJGUأؙٓحث涪ػة٦ٝ חⴓָ֮
76 瀉劍涸זؽآطأדךًٔحز 4XJGU0CKFDUJWF$ⴽ㽿ػة٦ٝחⴓָ֮
77 ꞿ劍涸זؽآطأדךًٔحز 4XJGUأؙٓحث涪ػة٦ٝ חⴓָ֮
78 罋63- 傀㶷ך0CKFDUJWF$،فٔ؛٦ءّٝ4XJGUד剅ֹ䳔ִ鑧 IUUQUFDIMJGFDPPLQBEDPNFOUSZ "NFCB،فٔ0CKFDUJWF$ַ4XJGUפך獳遤 IUUQBNFCMPKQDBQJYFMFOUSZIUNM 4XJGUPOUIF0CK$TIJCVZBTXJGU IUUQTTQFBLFSEFDLDPNBJOBNFTXJGUPOUIFPCKDOVNCFSTIJCVZBTXJGU 'FFUJO#PUI8PSMET'SPN0CKFDUJWF$UP4XJGU IUUQTXXXZPVUVCFDPNXBUDI
WR@:7"1D
79 ֶ%