Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Libraries for the Swift

Libraries for the Swift

Libraries for the Swift

yohei sugigami

May 13, 2015
Tweet

More Decks by yohei sugigami

Other Decks in Technology

Transcript

  1. HTTP + JSON ˔"MBNPpSF˒  ɹɹIUUQTHJUIVCDPN"MBNPpSF"MBNPpSF ˔4XJGUZ+40/˒  ɹɹIUUQTHJUIVCDPN4XJGUZ+40/4XJGUZ+40/ ˔"SHP˒

    ɹɹIUUQTHJUIVCDPNUIPVHIUCPU"SHP ˔+40/&YQPSU˒ ɹɹIUUQTHJUIVCDPN"INFE"MJ+40/&YQPSU 3FGT4XJGUͷ+40/Λѻ͏ϥΠϒϥϦ·ͱΊ
  2. 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) } } } } }) }
  3. 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 }
  4. 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 }
  5. 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)") } } }
  6. 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: