RxSwift/RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.s...

211 lines
5.3 KiB
Swift
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// APIWrappersViewController.swift
// RxExample
//
// Created by Carlos García on 8/7/15.
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
//
import UIKit
import CoreLocation
#if !RX_NO_MODULE
import RxSwift
import RxCocoa
#endif
extension UILabel {
open override var accessibilityValue: String! {
get {
return self.text
}
set {
self.text = newValue
self.accessibilityValue = newValue
}
}
}
class APIWrappersViewController: ViewController {
@IBOutlet weak var debugLabel: UILabel!
@IBOutlet weak var openActionSheet: UIButton!
@IBOutlet weak var openAlertView: UIButton!
@IBOutlet weak var bbitem: UIBarButtonItem!
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var switcher: UISwitch!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
@IBOutlet weak var button: UIButton!
@IBOutlet weak var slider: UISlider!
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var datePicker: UIDatePicker!
@IBOutlet weak var mypan: UIPanGestureRecognizer!
@IBOutlet weak var textView: UITextView!
let manager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
datePicker.date = Date(timeIntervalSince1970: 0)
// MARK: UIBarButtonItem
bbitem.rx.tap
.subscribe(onNext: { [weak self] x in
self?.debug("UIBarButtonItem Tapped")
})
.addDisposableTo(disposeBag)
// MARK: UISegmentedControl
// also test two way binding
let segmentedValue = Variable(0)
_ = segmentedControl.rx.value <-> segmentedValue
segmentedValue.asObservable()
.subscribe(onNext: { [weak self] x in
self?.debug("UISegmentedControl value \(x)")
})
.addDisposableTo(disposeBag)
// MARK: UISwitch
/*
// also test two way binding
let switchValue = Variable(true)
/***Unlike other controls, Apple is reusing instances of UISwitch or a there is a leak,
so underlying observable sequence won't complete when nothing holds a strong reference
to UISwitch.***/
(switcher.rx.value <-> switchValue).addDisposableTo(disposeBag)
switchValue.asObservable()
.subscribe(onNext: { [weak self] x in
self?.debug("UISwitch value \(x)")
})
.addDisposableTo(disposeBag)
// MARK: UIActivityIndicatorView
switcher.rx.value
.bindTo(activityIndicator.rx.animating)
.addDisposableTo(disposeBag)
*/
// MARK: UIButton
button.rx.tap
.subscribe(onNext: { [weak self] x in
self?.debug("UIButton Tapped")
})
.addDisposableTo(disposeBag)
// MARK: UISlider
// also test two way binding
let sliderValue = Variable<Float>(1.0)
_ = slider.rx.value <-> sliderValue
sliderValue.asObservable()
.subscribe(onNext: { [weak self] x in
self?.debug("UISlider value \(x)")
})
.addDisposableTo(disposeBag)
// MARK: UIDatePicker
// also test two way binding
let dateValue = Variable(Date(timeIntervalSince1970: 0))
_ = datePicker.rx.date <-> dateValue
dateValue.asObservable()
.subscribe(onNext: { [weak self] x in
self?.debug("UIDatePicker date \(x)")
})
.addDisposableTo(disposeBag)
// MARK: UITextField
// also test two way binding
let textValue = Variable("")
_ = textField.rx.textInput <-> textValue
textValue.asObservable()
.subscribe(onNext: { [weak self] x in
self?.debug("UITextField text \(x)")
})
.addDisposableTo(disposeBag)
// MARK: UIGestureRecognizer
mypan.rx.event
.subscribe(onNext: { [weak self] x in
self?.debug("UIGestureRecognizer event \(x.state)")
})
.addDisposableTo(disposeBag)
// MARK: UITextView
// also test two way binding
let textViewValue = Variable("")
_ = textView.rx.textInput <-> textViewValue
textViewValue.asObservable()
.subscribe(onNext: { [weak self] x in
self?.debug("UITextView text \(x)")
})
.addDisposableTo(disposeBag)
// MARK: CLLocationManager
#if !RX_NO_MODULE
manager.requestWhenInUseAuthorization()
#endif
manager.rx.didUpdateLocations
.subscribe(onNext: { x in
print("rx_didUpdateLocations \(x)")
})
.addDisposableTo(disposeBag)
_ = manager.rx.didFailWithError
.subscribe(onNext: { x in
print("rx_didFailWithError \(x)")
})
manager.rx.didChangeAuthorizationStatus
.subscribe(onNext: { status in
print("Authorization status \(status)")
})
.addDisposableTo(disposeBag)
manager.startUpdatingLocation()
}
func debug(_ string: String) {
print(string)
debugLabel.text = string
}
}