Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Libraries for the Swift
Search
yohei sugigami
May 13, 2015
Technology
5.5k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Libraries for the Swift
Libraries for the Swift
yohei sugigami
May 13, 2015
More Decks by yohei sugigami
See All by yohei sugigami
Snapshot Testing in iOS
susieyy
6
3.4k
Redux with iOS
susieyy
0
1.4k
Why use Redux in iOS
susieyy
5
2.8k
ReduxRxを活用したアプリアーキテクチャ
susieyy
8
2.4k
Redux+Rxを活用したiOSアプリアーキテクチャ
susieyy
10
2.3k
Swaggerで始めるAPI定義管理とコードジェネレート
susieyy
14
7.8k
開発中のアプリをXcode9 & Swift4に移行しました
susieyy
0
3.9k
Wantedly People ViewModel and Rx
susieyy
7
7.6k
ReduxDevTools' power to the iOS development
susieyy
0
950
Other Decks in Technology
See All in Technology
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
210
AIに会社の文脈を理解させる技術~上流工程・非エンジニアにも広げるハーネスエンジニアリング実践~
ochtum
0
190
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
160
20260930_Gemma4_Hands-on
tsho
0
120
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
4
1.4k
DORA_Metrics.pdf
wagnerfusca
1
130
認知負荷を吸収し、プロダクトをまたぐPR Preview基盤の設計事例
taiki45
2
540
HacobuにおけるFDEとは/登壇資料(戸井田 裕貴)
hacobu
PRO
1
530
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
700
LT:「このままでいいのかな?」から一歩踏み出した私のデータキャリア選択〜社会人3年目に上京を決意したリアル〜Snowflake女子会 vol.8
snowwmn0824
0
110
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
4
870
2026-09-26 Platform Engineering Kaigi 2026 インフラとアプリの境界線と委譲の設計 / Drawing the Infra and App Line
masasuzu
0
450
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
250
Odyssey Design
rkendrick25
PRO
2
830
Are puppies a ranking factor?
jonoalderson
2
4k
How to Talk to Developers About Accessibility
jct
2
560
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
290
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
240
Unsuck your backbone
ammeep
672
58k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
780
Transcript
Libraries for the Swift yohei SUGIGAMI
None
We are selecting the library for a New App
HTTP + JSON ˔"MBNPpSF˒ ɹɹIUUQTHJUIVCDPN"MBNPpSF"MBNPpSF ˔4XJGUZ+40/˒ ɹɹIUUQTHJUIVCDPN4XJGUZ+40/4XJGUZ+40/ ˔"SHP˒
ɹɹIUUQTHJUIVCDPNUIPVHIUCPU"SHP ˔+40/&YQPSU˒ ɹɹIUUQTHJUIVCDPN"INFE"MJ+40/&YQPSU 3FGT4XJGUͷ+40/Λѻ͏ϥΠϒϥϦ·ͱΊ
JSONExport 3FGT4XJGUͷ+40/Λѻ͏ϥΠϒϥϦ·ͱΊ 4XJGU$MBTTFT5PVTFXJUI4XJGUZ+40/MJCSBSZ 4XJGU$MBTTFT5PVTFXJUI3FBMN
˔3FBDUJWF$PDPB#FUB˒ ɹɹIUUQTHJUIVCDPN3FBDUJWF$PDPB3FBDUJWF$PDPB ˔4XJGU5BTL˒ ɹɹIUUQTHJUIVCDPN3FBDU,JU4XJGU5BTL ˔#SJHIU'VUVSFT˒ ɹɹIUUQTHJUIVCDPN5IPNWJT#SJHIU'VUVSFT ˔'VUVSF,JU˒ ɹɹIUUQTHJUIVCDPN'VUVSF,JU'VUVSF,JU Promise
/ Future
˔3FBDUJWF$PDPB#FUB˒ ɹɹIUUQTHJUIVCDPN3FBDUJWF$PDPB3FBDUJWF$PDPB ˔3FBDU,JU˒ ɹɹIUUQTHJUIVCDPN3FBDU,JU3FBDU,JU ˔3Y4XJGU˒ ɹɹIUUQTHJUIVCDPNKTQBISTVNNFST3Y4XJGU ˔3Y4XJGU˒ ɹɹIUUQTHJUIVCDPNL[BIFS3Y4XJGU Reactive
SwiftTask func auth() -> AuthTask { return self.getAccessToken() .then({ (token:
String?, errorInfo: ResponseTask.ErrorInfo?) -> AuthTask in return AuthTask { progress, fulfill, reject, configure in if let errorInfo = errorInfo { reject(errorInfo.error!) return } if let token = token { self.ref.authWithCustomToken(token) { (error: NSError!, autData: AuthData!) in if let error = error { reject(error) return } if let autData = autData { fulfill(autData) } } } } }) }
ViewBinding ˔3FBDUJWF$PDPB#FUB˒ ɹɹIUUQTHJUIVCDPN3FBDUJWF$PDPB3FBDUJWF$PDPB ˔4XJGU#POE˒ ɹɹIUUQTHJUIVCDPN4XJGU#POE#POE ˔3FBDU,JU˒ ɹɹIUUQTHJUIVCDPN3FBDU,JU3FBDU,JU
SwiftBond class LoginViewController: UIViewController { @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
@IBOutlet weak var usernameTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! @IBOutlet weak var loginButton: UIButton! let viewModel = LoginViewModel() override func viewDidLoad() { viewModel.username <->> usernameTextField viewModel.password <->> passwordTextField viewModel.activityIndicatorVisible ->> activityIndicator viewModel.loginButtonEnabled ->> loginButton viewModel.loginState ->| loginStateChangedObserver loginButton.dynEvent .filter(==, .TouchUpInside) ->| loginButtonTapObserver }
SwiftBond var tableViewDataSourceBond: UITableViewDataSourceBond<UITableViewCell>! override func viewDidLoad() { super.viewDidLoad() tableViewDataSourceBond
= UITableViewDataSourceBond(tableView: self.tableView) repositories.map { [unowned self] (repository: Repository) -> UITableViewCell in let cell = self.tableView .dequeueReusableCellWithIdentifier("cell") as UITableViewCell repository.name ->> cell.nameLabel repository.photo ->> cell.avatarImageView return cell } ->> tableViewDataSourceBond }
Functional tool kit ˔%PMMBSBOE$FOU˒ ɹɹIUUQTHJUIVCDPNBOLVSQ%PMMBSTXJGU ˔4XJGU[˒ ɹɹIUUQTHJUIVCDPNUZQFMJGU4XJGU[ ˔&Y4XJGU˒
ɹɹIUUQTHJUIVCDPNQ/SF&Y4XJGU
Date Helper ˔4XJGU.PNFOU˒ ɹɹIUUQTHJUIVCDPNBLPTNB4XJGU.PNFOU ˔5JNFQJFDF˒ ɹɹIUUQTHJUIVCDPNOBPUZ5JNFQJFDF ˔"'%BUF)FMQFS˒ ɹɹIUUQTHJUIVCDPNNFMWJUBY"'%BUF)FMQFS ˔5FNQP˒ ɹɹIUUQTHJUIVCDPNSFNJSPCFSU5FNQP
Logger ˔9$(-PHHFS˒ ɹɹIUUQTHJUIVCDPN%BWF8PPE$PN9$(-PHHFS ˔4XFMM˒ ɹɹIUUQTHJUIVCDPNIVCFSUS4XFMM
XCGLogger with Aspects let logger = XCGLogger.defaultInstance() logger.setup(logLevel: .Verbose, showLogLevel:
true, showFileNames: true, showLineNumbers: true, writeToFile: nil) let hooks = ["viewDidLoad", "viewWillAppear:", "viewWillDisappear:"] UIViewController.aspect_hookLoggers(hooks) { (_className: String?, _methodName: String?) in if var className = _className { if var methodName = _methodName { let items = className.componentsSeparatedByString(".") className = items.count > 1 ? items[1] : items[0] logger.verbose("\(className)#\(methodName)") } } }
XCGLogger with Aspects 2015-05-10 16:18:57.847 [Info] XCGLogger Version: 2.0 -
LogLevel: Verbose 2015-05-10 16:18:57.978 [Verbose] [AppDelegate.swift:87] UITabBarController#viewDidLoad 2015-05-10 16:18:57.995 [Verbose] [AppDelegate.swift:87] UITabBarController#viewWillAppear: 2015-05-10 16:18:58.005 [Verbose] [AppDelegate.swift:87] UITableViewController#viewDidLoad 2015-05-10 16:18:58.005 [Verbose] [AppDelegate.swift:87] UITableViewController#viewWillAppear:
Architecture
Architecture 7JFX $POUSPMMFS 7JFX.PEFM .PEFM 3FBDU,JU 4XJGU5BTL 4XJGUZ+40/ 4XJGU#POE .77.
Find a library
GitHub Search Repositories
GitHub Trending Repositories
Awesome Swift
Swift Toolbox
CocoaControls
Enjoy your library life.