Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Swift 4.0 対応しようとしたら大変な目に遭った話
Elvis Shi
September 16, 2017
Programming
4
1.8k
Swift 4.0 対応しようとしたら大変な目に遭った話
Swift 4対応するときのエモい話
Elvis Shi
September 16, 2017
Tweet
Share
More Decks by Elvis Shi
See All by Elvis Shi
偏見と妄想で語るスクリプト言語としての Swift / Swift as a Scripting Language
lovee
2
270
danger-swift-kantoku
lovee
1
130
Decimal、正しく使ってる? / Are you using Decimal correctly?
lovee
4
280
A story about me trying to make a router that manages when, how and which view to transit in a SwiftUI app
lovee
1
160
M1チップの脆弱性M1raclesを読み解く / About the vulnerability on M1 chip called M1racles
lovee
1
790
Demystify SwiftUI 要約 / Summary of Demystify SwiftUI
lovee
3
350
いいから `!` を使え! / Shut up and use `!` !
lovee
11
3.4k
SwiftUIにおける依存性逆転原則の戦略 / A strategy to import Dependency-Inversion-Principle in SwiftUI apps
lovee
3
430
CGAffineTransform はどう動いてるのか?〜Swift エンジニアのための線形代数〜 / How does CGAffineTransform work? ~A linearity lesson for Swift engineers~
lovee
0
220
Other Decks in Programming
See All in Programming
もしも、 上司に鬼退治を命じられたら~プロジェクト計画編~
higuuu
0
290
書籍『良いコード/悪いコードで学ぶ設計入門』でエンジニアリングの当たり前を変える
minodriven
3
1.1k
クリエイティブ系のウェブサイト制作で役立つCSS技法 / CSS for develop creative website
clockmaker
2
1.7k
Composing an API with Kotlin (Kotlin Dev Day 2022)
zsmb
0
290
Jakarta EE 10 is Coming Your Way
ivargrimstad
0
3k
あなたの会社の古いシステム、なんとかしませんか?~システム刷新から考えるDX化への道筋とバリエーション~/webinar20220420-grapecity
grapecity_dev
0
140
byte列のbit表現を得るencodingライブラリ作った
convto
1
190
競プロへの誘 -いざな-
u76ner
0
380
Android入門
hn410
0
310
코드 품질 1% 올리기
pluu
1
1k
スモールチームがAmazon Cognitoでコスパよく作るサービス間連携認証
tacke_jp
2
800
CLI構築のススメ
nyankotaro
1
220
Featured
See All Featured
Three Pipe Problems
jasonvnalue
89
8.6k
What's new in Ruby 2.0
geeforr
336
30k
A Philosophy of Restraint
colly
192
14k
Designing the Hi-DPI Web
ddemaree
272
32k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
19
1.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
224
49k
Web development in the modern age
philhawksworth
197
9.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
638
52k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
350
21k
Design by the Numbers
sachag
271
17k
Making Projects Easy
brettharned
98
4.3k
Visualization
eitanlees
124
11k
Transcript
4XJGUରԠ͠Α͏ͱͨ͠Β େมͳʹૺͬͨ for iOSDC Japan 2017
ΤϞ͍ ࠓ ˞4XJGUͷݴޠ༷ͷ͋Γ·ͤΜɻ
override init() { super.init() emplyedBy = "MAGES. 5pb. Game div"
job = "iOS Developer" twitter = "@lovee" qiita = "@lovee" github = "el-hoshino" additionalInfo = "དྷ݄స৬͠·͢ʘ(^o^)ʗ" class Speaker: Developer { } }
4XJGUରԠɺ ͍ͯ͠·͔͢ʁ
ࢲ88%$ޙ͔Β ͍ͯ͠·͢ʂ
ˠ ˠ ˠ ☠
ௐࢠʹͬͯ ͠·ͬͨ
ຊͷ ओ
1MPU 3FWJFX "QQMJDBUJPO 7JB %BUBJOQVU "TTJTUBOU
13"7%" "%7ήʔϜγφϦΦ ϨϏϡʔΞϓϦ༻ ϑϨʔϜϫʔΫ
13"7%" νϟϓλʔϑϩʔͰ ಡΈ͍ͨষΛબͿ
13"7%" ͦͷষͷ࠷ॳͷ γφϦΦϑΝΠϧΛ ಡΉ
13"7%" ηϦϑʹධՁΛ ͚ͭΔ
13"7%" ͜ͷϑΝΠϧࣗମٴͼ ͜ͷϑΝΠϧʹ ొͨ͠ΩϟϥΛධՁ
13"7%" ࣍ͷϑΝΠϧ ਐΉ
13"7%" ষͰ͜ͷষͷ ײΛ͢
13"7%" ৽͍͠νϟϓλʔ͕ ղআ͞Εɺ νϟϓλʔϑϩʔ
13"7%" UITableView UIPageView UISlider UIPanGestureRecognizer FUDʜ
13"7%"։ൃ࣌αϚϦʔ ▸ ։ൃ։࢝࣌ɿ4XJGUظ ▸ ࣌ґଘڥɿࣗ࡞ϑϨʔϜϫʔΫ&MUBTP ݩڟͦͷҰ ݩڟͦͷೋ
13"7%"։ൃॳͷεΩϧະख़ͩͬͨ ▸ J04։ൃʹͦͦ͜͜׳Ε͖ͯ࢝Ίͨࠒ ▸ ઃܭʹؾΛΓ࢝Ί͕ͨܦݧઙ͔ͬͨͨΊ·͔ͩͬͨ ▸ σʔλϑϩʔ͕ෳࡶͰಈ࡞Λ͍ʹ͔ͬͨ͘ ▸ ʮڞ௨ͷઃఆ͔ͩΒΈΜͳ͏ʯͱ͍͏୯७ͳཧ༝Ͱ4JOHMFUPOΛ͍ ͕ͬͨ
▸ ͱΓ͋͑ͣ4XJGUʹ্͛ͯΈͨΒ΄ͱΜͲमਖ਼͍Βͣ ▸ ͔͔ͤͬͩ͘ΒؾʹͳͬͨϙΠϯτͦ͏ͱࢥͬͨ ▸ ্هͷઃܭͷ͞Ͱେ෯ͳॻ͖͑Λڧ͍ΒΕͨ
13"7%"։ൃ࣌αϚϦʔ ▸ ։ൃ։࢝࣌ɿ4XJGUظ ▸ ࣌ґଘڥɿࣗ࡞ϑϨʔϜϫʔΫ&MUBTP ݩڟͦͷҰ ݩڟͦͷೋ
&MUBTPͱԿ͔ ▸ 4XJGUʹ͋Γͦ͏Ͱͳ͔ͬͨ৭ΜͳศརͳػೳΛΓࠐΜͩ൚༻ϑϨʔϜϫʔΫ ▸ CGPointಉ࢜ͳͲͷ͠ࢉҾ͖ࢉ ▸ ܾ·ͬͨൣғͷཚੜInt.makeRandom(within: 0 ..< 10)
▸ ྻͷγϟοϑϧ[1, 2, 3, 4, 5].shuffled ▸ ͳͲͳͲʜ ▸ ࠷ॳϋοΧιϯͷ࣌ͷίʔσΟϯάޮͷͨΊʹ࡞ͬͨ ▸ ࡞ͬͯΔ͏ͪʹʮ࣮ʹศར͡ΌͶʯͱࢥ͍ͬͯ࢝Ίͨ IUUQTHJUIVCDPNFMIPTIJOP&MUBTP
&MUBTPͷԿ͕มΘ͔ͬͨ ▸ ͿͬͪΌ͚࡞ͬͨॳԿਂ͘ߟ͑ͣʹػೳΓࠐΜͰͨ ▸ 4XJGUˠͷ࣌ͷίʔυमਖ਼͚ͩͰେมͩͬͨͷͰͦΕʹઐ೦ͨ͠ ▸ 4XJGUˠͷࠓίʔυमਖ਼΄΅ͳ͔ͬͨͷͰʮ༨ܭʯͳ͜ͱߟ͑࢝Ίͨ ▸ ͜ͷ"1*ઃܭຊʹެࣜΨΠυϥΠϯʹଇͬͯΔ͔Ͳ͏͔ ▸
͜Εຊʹ&MUBTPʹೖΕΔ͖ػೳ͔ʢಠཱͤ͞Δ͖͔ʣ ▸ 5BSHFUFE&YUFOTJPOTͷಋೖʢxxx.rx.doSth()Έ͍ͨͳॻ͖ํʣ ▸ ͍ํ͕ΨϥϦͱมΘͬͯ&MUBTPґଘͷϓϩδΣΫτ͕େมͳ͜ͱʹ IUUQTHJUIVCDPNFMIPTIJOP&MUBTP
/PU"VUP-BZPVUΛ৽ͨʹಋೖͨ͠ ▸ ॳશͯͷϨΠΞτίʔυϕʔεͩͬͨ ▸ ϨΠΞτશͯlayoutSubviews()ͷoverrideͰରԠͨ͠ ▸ ೝ͕ࣝΓͣɺlayoutSubviews()Λݺͼग़͢Օॴ͋ͬͨ ▸ ࢠϏϡʔΛϓϩύςΟʔͱͯ͠อ࣋͢Δඞཁ͕͋ͬͨ ▸
ผͷϓϩδΣΫτͷ੍࡞࣌ʹ/PU"VUP-BZPVUΛ࡞ͬͨ ▸ layoutSubviews()Λඞͣ͠override͢Δඞཁ͕ͳ͘ͳͬͨ ▸ ࢠϏϡʔͷϨΠΞτΛϏϡʔͷϓϩύςΟʔͱͯ͠อ࣋Ͱ͖ΔͨΊ ࢠϏϡʔࣗମΛϓϩύςΟʔͱͯ͠อ࣋͢Δඞཁ͕ͳ͘ͳͬͨ ▸ ʲએʳචऀݱࡏͷϝΠϯ044ϓϩδΣΫτʂ IUUQTHJUIVCDPNFMIPTIJOP/PU"VUP-BZPVU
݁Ռɿ ຆͲॻ͖͑ʹ
FlowContentControllerʢچʣ fileprivate lazy var chapterButtons: [FlowChapterButton] = { let chapters
= GlobalSettings.shared.chapterMetas let buttons = chapters.enumerated().map { (i, chapterMeta) -> FlowChapterButton in let button = FlowChapterButton(meta: chapterMeta) button.setOnTappedAction({ [weak self] _ in self?.didSelectChapter(i) }) return button } return buttons }()
FlowContentControllerʢ৽ʣ private lazy var chapterButtons: [FlowChapterButton] = { let chapters
= self.model.getChapters(for: self) let buttons = chapters.map { (chapter) -> FlowChapterButton in let button = self.makeButton(for: chapter) return button } return buttons }()
FlowControllerʢچʣ override func viewDidLoad() { super.viewDidLoad() // Do any additional
setup after loading the view. do { let controller = self.flowContentController controller.delegate = self controller.dataSource = self.dataSource self.addChildViewController(controller) self.flowView.contentView = controller.view controller.didMove(toParentViewController: self) } do { let controller = self.pageHeaderController controller.setHeaderTitleString("νϟϓλʔબ") self.addChildViewController(controller) self.flowView.header = controller.view controller.didMove(toParentViewController: self) } }
FlowControllerʢ৽ʣ override func viewDidLoad() { super.viewDidLoad() self.setupContentController() self.setupHeaderController() }
ScenarioModelʢ৽چࠩʣ
➡ େมͩͬͨ ͚Ͳ ಡΈ͢͞ େ෯ʹ㽉
ͱࢥͬͨΒࠓ J1IPOF9ͷొͩ
None
ͰؤுͬͯͰ /PU"VUP-BZPVUΛ TBGF"SFB*OTFUTʹ ରԠͤͨ͞
None
چ ৽
ʲએʳ /PU"VUP-BZPVU ධެ։தʂ IUUQTHJUIVCDPNFMIPTIJOP/PU"VUP-BZPVU
ڭ܇ͦͷҰ ▸ 4JOHMFUPO͖ͪΜͱ͏͖͔Λߟ͔͑ͯΒ͑ ▸ ʮΠϯελϯε͕Ұݸ͔͠ͳ͍ʯ4JOHMFUPOΛ͏ཧ༝ʹͳΒͳ͍ ▸ ʮΈΜͳڞ௨ͯ͠͏ʯ4JOHMFUPOΛ͏ཧ༝ʹͳΒͳ͍ ▸ ʮ୭͍ͭ͜ʹΛ࣋ͯΔʹΓਚ͘͢͜ͱ͕ڐ͞ΕΔʯͷ͚ͩ 4JOHMFUPOΛ͍͍ͬͯ
ڭ܇ͦͷೋ ▸ ઃܭ͖ͪΜͱอक͢Δ࣌ͷࣗΛߟ͑ͯઃܭ͠Ζ ▸ ѱ͍ઃܭॻ͘ͱ͖ศར͔͠Εͳ͍͕อक࣌ʹࢮ͵ ▸ อक࣌ʹͦͷѱ͍ઃܭΛʹ͢ΔͱͦΕΛॻ͍ͨࣗΛͿΜԥΓͨ͘ͳΔ ▸ Ͱ·͔͋ͱݴͬͯͿͬͪΌ͚ͦΕࣗͷεΩϧʹґଘ͢Δͷ͔ͩΒ ࠓ͖ͪΜͱͨͭ͠ΓͰଟޙͷอक࣌ʹྺ࢙܁Γฦ͢
▸ ͦΕͰͦΕεΩϧΞοϓͷূڌ͔ͩΒڪΕͣʹ͠·͠ΐ͏
ڭ܇ͦͷࡾ ▸ 'SBNFXPSLͷଟ༻ґଘੑ͕େมͳ͜ͱʹͳΔ ▸ ͍࢝Ίͨͱ͖͔֬ʹศར͚ͩͲґଘ͢Δ'SBNFXPSL͕૿͑Δͱ ͦͷ͚ͩґଘؔ૿͑Δ ▸ 'SBNFXPSLʹมߋ͕͋ΔͱͬͯΔϓϩδΣΫτͷमਖ਼༨ّͳ͘͞ΕΔ ▸ 'SBNFXPSLΛࣗ࡞͢ΔͱϓϩάϥϜઃܭʹ͍ͭͯΑΓਂ͘ߟ͑ͤͯ͘͞ΕΔ
▸ 'SBNFXPSLͦΕΛར༻͢ΔશͯͷϓϩδΣΫτʹӨڹΛٴ΅͢ͷͰ "1*ͷઃܭʹͱͯؾΛ͚ͭΔඞཁ͕͋Δ
ॳ৺ऀͷΞυόΠε ▸ ͱʹ͔͕͘Ή͠ΌΒʹ͍ͬͺ͍ॻ͖·͠ΐ͏ɻ ▸ Կߟ͑ͣʹॻ͘ͷͰͳ͘ɺྫ͑)PX͕ཧղͰ͖ͳͯ͘ɺ8IBUͱ8IZ Λཧղ͢ΔྗΛ͠·͠ΐ͏ɻ ▸ Γ͍ͨ͜ͱ͕Ͱ͖͔ͨΒͬͯࢥߟఀࢭͤͣɺΑΓྑ͍ॻ͖ํ͕ͳ͍͔ߟ͑· ͠ΐ͏ɻ ▸
͍ͬͺ͍นʹͿ͔ͭͬͯઃܭʹ͍ͭͯͷཧղΛਂΊ·͠ΐ͏ɻ ▸ 2JJUB5FSB5BJMྑ͍Ͱ͕͢ɺެࣜυΩϡϝϯτͪΌΜͱಡΈ·͠ΐ͏ɻ ▸ લͷ͕ࣗॻ͍ͨίʔυ͕ΫιͩͱࢥΘͳ͔ͬͨΒ͕ࢭ·ͬͨূڌʂ
͋Γ͕ͱ͏ ͍͟͝·ͨ͠ʂ