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
1年前に作った物と同じ目的のライブラリをまたSwift 3で作ってみた
Search
fromkk
November 29, 2016
Technology
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1年前に作った物と同じ目的のライブラリをまたSwift 3で作ってみた
TMValidatorを作った経験を活かしてSwift 3で同じ目的のライブラリを作ってみました。
fromkk
November 29, 2016
More Decks by fromkk
See All by fromkk
note社の全員野球で品質向上活動について / note_qa_challenge #iOS_test_teatime
fromkk
3
2k
1年分のデータが見たいと言われてやったこと/yearly_data_with_note
fromkk
0
1k
note iOSチームの自動化 ver.2021/automation_with_iOS_team_on_note_ver2021
fromkk
0
2.1k
Bitrise体験会説明資料/bitrise_explore
fromkk
1
1.2k
noteのiOSアプリで実装したアクセシビリティの全て #iosdc #a /a11y_with_iOS_App_on_note
fromkk
2
5.2k
dSYMのアップロードで SPMを活用する/use_spm_with_upload_dsyms
fromkk
1
3.2k
Bitriseのリモートアクセス機能 #bitrise_meetup/remote_access_of_bitrise
fromkk
1
690
note社でのMagic Pod活用事例 #af_iosdc/magicpod_with_note
fromkk
2
12k
iOSには無いmacOS独自機能をCatalystで実装する #iosdc #d/make_macos_apps_with_catalyst
fromkk
9
2.3k
Other Decks in Technology
See All in Technology
Webアクセシビリティ入門 2026
recruitengineers
PRO
2
440
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
150
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
430
toio・myCobotでフィジカルAIっぽいことを行うための検討(とりあえず調査) / フィジカルAI LT(IoTLTによる開催)
you
PRO
0
300
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
270
【CEDEC2026】『Relink』を拡張せよ - 『GRANBLUE FANTASY: Relink - Endless Ragnarok』の開発速度と品質を守るCI運用
cygames
PRO
0
140
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
240
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
950
20分でわかるセキュアAPI
nwiizo
0
180
第3回しろおびセキュリティスポンサーセッション
log0417
0
150
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
2
210
MIRU 2026 チュートリアル
keisuke198619
0
860
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.7k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Code Reviewing Like a Champion
maltzj
528
40k
Ruling the World: When Life Gets Gamed
codingconduct
0
290
Design in an AI World
tapps
1
270
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
Transcript
1લʹ࡞ͬͨͱಉ͡ తͷϥΠϒϥϦΛ·ͨ Swift 3Ͱ࡞ͬͯΈͨ AKIBA.swift #7 (C) fromkk. 2016 1
ࣗݾհ ২Ԭɹ࠸ Timers inc.ͷiOSΤϯδχΞ Twitter: @fromkk Github: fromkk Qiita: fromkk
(C) fromkk. 2016 2
એ Χοϓϧ͚ΞϓϦͷPairy ͱ Ո͚ࣸਅڞ༗ΞϓϦͷ Famm ΛӡӦ͍ͯ͠Δ Ͱ ΤϯδχΞΛืू ͍ͯ͠·͢ʂ ڵຯͷ͋Δํֻ͓͚ɺ͘͠
http://timers-inc.com/ ΑΓ͓͍߹ΘͤԼ͍͞ʂ (C) fromkk. 2016 3
ࠓͷձࣾʹೖࣾͨ͠ࠒʹ TMValidator ͱ͍͏ ϥΠϒϥϦΛ࡞͠·ͨ͠ https://github.com/fromkk/TMValidator (C) fromkk. 2016 4
(C) fromkk. 2016 5
͋Ε͔Β1 • Swift 3͕ϦϦʔε͞ΕOSSʹͳͬͨ • ࣗࣾͷΞϓϦ50%͙Β͍͕Swiftʹͳͬͨ • ͦΕʹڞͳͬͯʑॻ͘ίʔυSwiftʹ (C) fromkk.
2016 6
ࠓಉ͡ϥΠϒϥϦΛ࡞ΔͱͲ͏ͳΔ͔ʁ (C) fromkk. 2016 7
࡞ͬͯΈͨ (C) fromkk. 2016 8
Valy https://github.com/fromkk/Valy • TMValidator ͱಉ͘͡όϦσʔγϣ ϯ༻ͷϥΠϒϥϦ • Swift 3 •
Carthage, CocoaPodsରԠ (C) fromkk. 2016 9
ࢥ TMValidator ͱ΄΅ಉ͡ 1.όϦσʔλʔΛ࡞ 2.ϧʔϧΛՃ 3.จࣈྻΛνΣοΫϝιουʹͤνΣοΫ݁ՌΛฦͯ͘͠Ε Δ (C) fromkk. 2016
10
Կނ࡞͔ͬͨ • աڈʹ࡞ͬͨͷ͕࣌ؒܦͭͱૈ͕ݟ͑Δ • ࣌Πέ͍ͯͨͱࢥ͍ͬͯͨઃܭվΊͯݟΔͱ͖ͬ͢Γ͠ ͍ͯͳ͍Օॴ͕ʹͭ͘ • SwiftΒ͍͠ॻ͖ํΛࢼͯ͠Έ͔ͨͬͨ (C) fromkk.
2016 11
TMValidatorͷαϯϓϧίʔυ UITextField *name = [[UITextField alloc] init]; name.text = @"໊લ";
TMValidatorField *fieldName = [TMValidatorField fieldWithValue:name.text andLabel:@"name" andElement:name]; [[fieldName addRule:[TMValidatorRuleRequired rule]] addRule:[TMValidatorRuleMaxLength ruleWithLength:@10]]; TMValidator *validator = [TMValidator validator]; [[validator addField:fieldName]; [validator runWithSuccesses:^(NSArray *successes) { NSLog(@"success! %@", successes); } andFailure:^(NSArray *errors) { NSLog(@"failure! %@", errors); }]; (C) fromkk. 2016 12
͍ (C) fromkk. 2016 13
Valyͷαϯϓϧίʔυ let value: String? = self.textField.text let result = Valy.factory()
.add(rule: ValyRule.required) .add(rule: ValyRule.maxLength(10)) .run(with: value) switch result { case .success: print("success!") case .failure(let rule): print("failed rule \(rule)") } (C) fromkk. 2016 14
ͳΜͱͳ͖ͬ͘͢Γʁ (C) fromkk. 2016 15
TMValidatorͷ • Objective-CͩͬͨͷͰશ͕ͯclassͷҝಠࣗϧʔϧ͕࡞Γਏ ͍ • ΤϥʔίʔυɾΤϥʔϝοηʔδΛ֤ϧʔϧʹ࣋ͨͤͯ͠·ͬ ͨͷͰࣗ༝͕ޮ͔ͳ͍ • ϧʔϧΛՃ͠ͳͯ͘νΣοΫϝιουΛ࣮ߦग़དྷͯ͠·͏ (C)
fromkk. 2016 16
ValyͰͷվળ • ϧʔϧAnyValidatorRuleϓϩτίϧΛద߹͍ͤͯ͑͞͞Ε ͍͍ • ΤϥʔϋϯυϦϯάόϦσʔτ݁Ռ͔Β࣮͢ΔͷͰࣗ ༝͕ߴ͍ʢͦͷίʔυྔ૿͑Δ͔ʣ • ܕফڈʹΑΓϧʔϧΛՃ͠ͳ͍ͱόϦσʔτ͕࣮ߦग़དྷͳ͍ (C)
fromkk. 2016 17
ܕফڈ (C) fromkk. 2016 18
ܕফڈ • ෳͷϓϩτίϧʹద߹ͨ͠ཁૉΛ࡞ • ݅ʹΑ֤ͬͯϓϩτίϧͷܕΛฦ͢ (C) fromkk. 2016 19
ValyͰͷܕফڈͷྫ protocol AnyValidator { var rules: [AnyValidatorRule] { get }
static func factory() -> AnyValidator static func factory(rules: [AnyValidatorRule]) -> AnyValidatable func add(rule: AnyValidatorRule) -> AnyValidatable func add(rules: [AnyValidatorRule]) -> AnyValidatable } protocol AnyValidatable: AnyValidator { func run(with value: String?) -> ValidatorResult } Valy.factory().run(with: value) //NG! Value of type 'AnyValidator' has no member 'run' Valy.factory().add(rule: ValyRule.required).run(with: value) //OK! (C) fromkk. 2016 20
·ͱΊ • ࣌ͷྲྀΕʹܦݧʹΑͬͯઃܭͷ෯͕૿͑ͨʢؾ͕͢Δʣ • ܕফڈΛར༻͢ΕίʔυΛॻ͘ଆʹ੍ݶΛՃ͑Δࣄ͕ग़དྷ ͯόάΛੜΈਏ͍ (C) fromkk. 2016 21
͍ͬͯ͏༰Ͱ Swift Advent Calendar 2016ʹ هࣄΛॻ͘ͷͰ ετοΫ ͍͍Ͷ Լ͍͞ʂ (C)
fromkk. 2016 22
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝ ·ͨ͠ʂ (C) fromkk. 2016 23