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
0
1.3k
1年前に作った物と同じ目的のライブラリをまたSwift 3で作ってみた
TMValidatorを作った経験を活かしてSwift 3で同じ目的のライブラリを作ってみました。
fromkk
November 29, 2016
Tweet
Share
More Decks by fromkk
See All by fromkk
note社の全員野球で品質向上活動について / note_qa_challenge #iOS_test_teatime
fromkk
3
1.9k
1年分のデータが見たいと言われてやったこと/yearly_data_with_note
fromkk
0
980
note iOSチームの自動化 ver.2021/automation_with_iOS_team_on_note_ver2021
fromkk
0
2k
Bitrise体験会説明資料/bitrise_explore
fromkk
1
1.1k
noteのiOSアプリで実装したアクセシビリティの全て #iosdc #a /a11y_with_iOS_App_on_note
fromkk
2
4.1k
dSYMのアップロードで SPMを活用する/use_spm_with_upload_dsyms
fromkk
1
3k
Bitriseのリモートアクセス機能 #bitrise_meetup/remote_access_of_bitrise
fromkk
1
600
note社でのMagic Pod活用事例 #af_iosdc/magicpod_with_note
fromkk
2
11k
iOSには無いmacOS独自機能をCatalystで実装する #iosdc #d/make_macos_apps_with_catalyst
fromkk
9
2.2k
Other Decks in Technology
See All in Technology
ニッポンの人に知ってもらいたいGISスポット
sakaik
0
150
React19.2のuseEffectEventを追う
maguroalternative
1
410
HR Force における DWH の併用事例 ~ サービス基盤としての BigQuery / 分析基盤としての Snowflake ~@Cross Data Platforms Meetup #2「BigQueryと愉快な仲間たち」
ryo_suzuki
0
230
ガバメントクラウド(AWS)へのデータ移行戦略の立て方【虎の巻】 / 20251011 Mitsutosi Matsuo
shift_evolve
PRO
2
200
業務効率化をさらに加速させる、ノーコードツールとStep Functionsのハイブリッド化
smt7174
2
140
PHPからはじめるコンピュータアーキテクチャ / From Scripts to Silicon: A Journey Through the Layers of Computing Hiroshima 2025 Edition
tomzoh
0
140
フレームワークを意識させないワークショップづくり
keigosuda
0
200
AI Agent Dojo #2 watsonx Orchestrateフローの作成
oniak3ibm
PRO
0
130
AIツールでどこまでデザインを忠実に実装できるのか
oikon48
6
3.5k
【Kaigi on Rails 事後勉強会LT】MeはどうしてGirlsに? 私とRubyを繋いだRail(s)
joyfrommasara
0
270
RDS の負荷が高い場合に AWS で取りうる具体策 N 連発/a-series-of-specific-countermeasures-available-on-aws-when-rds-is-under-high-load
emiki
4
3.6k
GoでもGUIアプリを作りたい!
kworkdev
PRO
0
150
Featured
See All Featured
The Language of Interfaces
destraynor
162
25k
Fireside Chat
paigeccino
40
3.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Why Our Code Smells
bkeepers
PRO
340
57k
BBQ
matthewcrist
89
9.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Gamification - CAS2011
davidbonilla
81
5.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
Faster Mobile Websites
deanohume
310
31k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
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