Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Libraries for the Swift
yohei sugigami
May 13, 2015
Technology
14
4.5k
Libraries for the Swift
Libraries for the Swift
yohei sugigami
May 13, 2015
Tweet
Share
More Decks by yohei sugigami
See All by yohei sugigami
susieyy
6
1.3k
susieyy
0
650
susieyy
5
1.2k
susieyy
8
980
susieyy
10
1.3k
susieyy
14
5.3k
susieyy
0
3k
susieyy
7
5.8k
susieyy
0
440
Other Decks in Technology
See All in Technology
ippey
2
210
soracom
0
180
900groove
2
510
yuzutas0
8
3.1k
shoichiron
1
150
dena_tech
1
180
raykataoka
9
8.7k
chaspy
6
1.3k
koukyo1994
5
1.6k
pakio
0
140
htomine
0
180
robcrowley
0
160
Featured
See All Featured
mza
80
4.1k
tammielis
237
23k
lara
590
61k
mthomps
38
2.3k
qrush
285
19k
eitanlees
112
10k
gr2m
83
11k
ufuk
56
5.4k
stephaniewalter
260
11k
colly
188
14k
jponch
103
5.1k
jonyablonski
19
1.2k
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.