Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swift coding Strategy
Search
Takaaki Tanaka
April 17, 2017
Technology
1.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Swift coding Strategy
AKIBA.swift 1周年記念での発表スライドです
テックな内容は皆無です
https://classmethod.connpass.com/event/53603/
Takaaki Tanaka
April 17, 2017
More Decks by Takaaki Tanaka
See All by Takaaki Tanaka
[デモです] NotebookLM で作ったスライドの例
kongmingstrap
0
610
Zenn のウラガワ ~エンジニアのアウトプットを支える環境で Google Cloud が採用されているワケ~ #burikaigi #burikaigi_h
kongmingstrap
22
8.5k
AWS re:Invent 2024 ふりかえり
kongmingstrap
0
480
製造の課題に立ち向かう Manufacturing Data Engine と Manufacturing Connect の ご紹介
kongmingstrap
0
1.4k
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
970
JAWS-UG 福岡 #16 re:Invent 現地に行った人のお話 #jawsugfuk #jawsug
kongmingstrap
0
770
AppMod の開発のイマを知るために現地に潜入した私が見たものは・・・? #GoogleCloudNext
kongmingstrap
0
870
Kong Gateway から読みとく、 API統合・API連携サービスの最新情報 #devio2023
kongmingstrap
0
2.3k
Cloud Run に憧れて Google Cloud を推進している話 / CX事業本部で使われている技術
kongmingstrap
0
380
Other Decks in Technology
See All in Technology
JAWS-UG初心者支部#88わいわい初心塾(夏休みの宿題やったかGit編)
otsuki
0
150
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
3
1.4k
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
260
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
260
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
130
データエンジニアリングワークショップ:Auto LoaderとSparkで学ぶデータパイプライン構築
databricksjapan
PRO
0
190
AndroidでHDRメディアを「壊さずに」扱う
chigichan24
0
410
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
150
設計の世代交代を乗り越える、14年続くAndroidアプリの開発戦略
sansantech
PRO
1
150
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
150
Self Healing Rollouts: Automating Production Fixes with Agentic AI
kdubois
0
160
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
130
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
4
570
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Product Roadmaps are Hard
iamctodd
55
13k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
720
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
Building a Scalable Design System with Sketch
lauravandoore
463
34k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
Transcript
2017/04/17 Swift coding Strategy AKIBA.swift Ұपه೦ษڧձ
About Me
• ాத ໌ (Takaaki Tanaka) • Ϋϥεϝιουגࣜձࣾ • ϞόΠϧόοΫΤϯυ •
@kongmingtrap • Swift / Objective-C / Scala / JavaScript … • GyazSquare / GitHub
˞ࣄͰ͢
None
ؓٳ
Strategy
Strategy Pattern
Strategy Pattern // MARK: - Interface public protocol TodoRepository {
func get(_ handler: @escaping (Result<[TodoEntity]>) -> Void) } // MARK: - Implementation final class TodoRepositoryImpl: TodoRepository { private let dataStore: TodoDataStore public init(dataStore: TodoDataStore) { self.dataStore = dataStore } func get(_ handler: @escaping (Result<[TodoEntity]>) -> Void) { dataStore.get(with: ["filter": "all"]).onSuccess { entities in let result = Result<[TodoEntity]>.success(entities) handler(result) }.onFailure { error in let result = Result<[TodoEntity]>.failure(error) handler(result) } } }
Strategy Pattern typealias TodoListComplitionHandler = ([TodoModel]?) -> Void // MARK:
- Interface protocol TodoListUseCase { func fetchTodos(_ complite: TodoListComplitionHandler?) } // MARK: - Implementation struct TodoListUseCaseImpl: TodoListUseCase { private let todoRepository: TodoRepository public init(todoRepository: TodoRepository) { self.todoRepository = todoRepository } public func fetchTodos(_ compliton: TodoListComplitionHandler?) { todoRepository.get { result in switch result { case .success(let value): let todoModels = try! TodoTranslator().translate(value) compliton?(todoModels) case .failure(let error): print(error) compliton?(nil) } } } }
Strategy Pattern 4USBUFHZ1BUUFSOΞϧΰϦζϜͷηοτΛఆ ٛ͢Δํ๏Λఏڙ͠ɺ͜ΕΒΛަՄೳʹ͢Δ ͜ͱΛతͱ͍ͯ͠Δɻ4USBUFHZ1BUUFSOΑΓɺ ΞϧΰϦζϜΛ༻ऀ͔Βಠཱͨ͠··༷ʑʹ มԽͤ͞Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔɻ
Strategy Pattern 4USBUFHZ1BUUFSOΞϧΰϦζϜͷηοτΛఆ ٛ͢Δํ๏Λఏڙ͠ɺ͜ΕΒΛަՄೳʹ͢Δ ͜ͱΛతͱ͍ͯ͠Δɻ4USBUFHZ1BUUFSOΑΓɺ ΞϧΰϦζϜΛ༻ऀ͔Βಠཱͨ͠··༷ʑʹ มԽͤ͞Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔɻ
Strategy of AKIBA.swift
Strategy ઓུʢͤΜΓΌ͘ɺӳ4USBUFHZʣɺҰൠతʹಛఆͷඪ Λୡ͢ΔͨΊʹɺظతࢹͱෳ߹ࢥߟͰྗࢿݯΛ૯߹త ʹӡ༻͢Δٕज़ɾՊֶͰ͋Δɻ
Strategy IUUQXXXJUNFEJBDPKQCJ[JEBSUJDMFT OFXTIUNM
Strategy w όουϊϋͳͲɺΫϥεϝιου͚ͩͰ ڞ༗Ͱ͖ͳ͍ใΛΛ௨ͯ͡ڞ༗Ͱ͖ΔΑ ͏ʹ͢Δ w ༗໊ਓͷํͱͭͳ͕ͬͯɺࠔͬͨͱ͖ʹฉ͚ ΔΑ͏ʹ͢Δ w Ϋϥεϝιου͔ΒελʔϓϨΠϠʔΛഐग़
͢Δ
Tactics w ִ݄ͰษڧձΛ։࠵͢Δ w ։࠵ϒϩάΛॻ͘ w ήετεϐʔΧʔΛট͘ w ॴΛఏڙ͢Δ w
ຖճςʔϚʹԊͬͯืूΛ͔͚Δ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ։࠵ཤྺ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ։࠵ཤྺ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ςʔϚ͕ܾ·Βͳ͔ͬͨճ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ϗʔϜͰ։࠵͠ͳ͔ͬͨճɹ#AKIBA #ͱ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ͦͦษڧձ͡Όແ͍
Tactics w ִ݄ͰษڧձΛ։࠵͢Δ w ։࠵ϒϩάΛॻ͘ w ήετεϐʔΧʔΛট͘ w ॴΛఏڙ͢Δ w
ຖճςʔϚʹԊͬͯืूΛ͔͚Δ
ͦΕඞউͷज़ɺ ߹มͷܗػʹ͋Γɻ
w ઓུΑΓઓज़ w ༏लͳޙํࢧԉʹΑͬͯࢧ͑ΒΕ͖ͯ ·ͨ͠ w ϒϩάඞͣ࣍ͷ·Ͱʹॻ͘ Recap
ΑΖ͓͘͠Ͷ͕͍͠·͢
0OFNPSFUIJOHʜ
IUUQEFWDMBTTNFUIPEKQOFXTNPCJMFUFBNJOPTBLBWPM
w ݄ w #6,630TXJGUY",*#"TXJGU w DPNJOHTPPOʜ
͓ΘΓ