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

Libraries for the Swift

Libraries for the Swift

Libraries for the Swift

Avatar for yohei sugigami

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: