mirror of
https://github.com/ReactiveX/RxSwift.git
synced 2024-10-05 22:47:15 +03:00
whitespaces issues, kzaher comments and pipelines in new lines
This commit is contained in:
parent
8f343c226d
commit
3fbe7d42bb
@ -10,23 +10,23 @@ import Foundation
|
||||
import RxSwift
|
||||
|
||||
class Dependencies {
|
||||
|
||||
static let sharedDependencies = Dependencies() // Singleton
|
||||
|
||||
let URLSession = NSURLSession.sharedSession()
|
||||
let backgroundWorkScheduler: ImmediateScheduler
|
||||
let mainScheduler: DispatchQueueScheduler
|
||||
let wireframe: Wireframe
|
||||
|
||||
private init() {
|
||||
wireframe = DefaultWireframe()
|
||||
|
||||
let operationQueue = NSOperationQueue()
|
||||
operationQueue.maxConcurrentOperationCount = 2
|
||||
operationQueue.qualityOfService = NSQualityOfService.UserInitiated
|
||||
backgroundWorkScheduler = OperationQueueScheduler(operationQueue: operationQueue)
|
||||
|
||||
mainScheduler = MainScheduler.sharedInstance
|
||||
}
|
||||
|
||||
|
||||
static let sharedDependencies = Dependencies() // Singleton
|
||||
|
||||
let URLSession = NSURLSession.sharedSession()
|
||||
let backgroundWorkScheduler: ImmediateScheduler
|
||||
let mainScheduler: DispatchQueueScheduler
|
||||
let wireframe: Wireframe
|
||||
|
||||
private init() {
|
||||
wireframe = DefaultWireframe()
|
||||
|
||||
let operationQueue = NSOperationQueue()
|
||||
operationQueue.maxConcurrentOperationCount = 2
|
||||
operationQueue.qualityOfService = NSQualityOfService.UserInitiated
|
||||
backgroundWorkScheduler = OperationQueueScheduler(operationQueue: operationQueue)
|
||||
|
||||
mainScheduler = MainScheduler.sharedInstance
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -43,16 +43,19 @@ class GitHubAPI {
|
||||
|
||||
let URL = NSURL(string: "https://github.com/\(URLEscape(username))")!
|
||||
let request = NSURLRequest(URL: URL)
|
||||
return self.URLSession.rx_response(request) >- map { (maybeData, maybeResponse) in
|
||||
if let response = maybeResponse as? NSHTTPURLResponse {
|
||||
return response.statusCode == 404
|
||||
return self.URLSession.rx_response(request)
|
||||
>- map { (maybeData, maybeResponse) in
|
||||
if let response = maybeResponse as? NSHTTPURLResponse {
|
||||
return response.statusCode == 404
|
||||
}
|
||||
else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
else {
|
||||
return false
|
||||
>- observeSingleOn(self.dataScheduler)
|
||||
>- catch { result in
|
||||
return returnElement(false)
|
||||
}
|
||||
} >- observeSingleOn(self.dataScheduler) >- catch { result in
|
||||
return returnElement(false)
|
||||
}
|
||||
}
|
||||
|
||||
func signup(username: String, password: String) -> Observable<SignupState> {
|
||||
|
@ -40,14 +40,16 @@ class ValidationService {
|
||||
|
||||
let loadingValue = (valid: nil as Bool?, message: "Checking availabilty ..." as String?)
|
||||
|
||||
return API.usernameAvailable(username) >- map { available in
|
||||
if available {
|
||||
return (true, "Username available")
|
||||
return API.usernameAvailable(username)
|
||||
>- map { available in
|
||||
if available {
|
||||
return (true, "Username available")
|
||||
}
|
||||
else {
|
||||
return (false, "Username already taken")
|
||||
}
|
||||
}
|
||||
else {
|
||||
return (false, "Username already taken")
|
||||
}
|
||||
} >- startWith(loadingValue)
|
||||
>- startWith(loadingValue)
|
||||
}
|
||||
|
||||
func validatePassword(password: String) -> ValidationResult {
|
||||
@ -176,33 +178,38 @@ class GitHubSignupViewController : ViewController {
|
||||
validationErrorLabel: self.repeatedPasswordValidationOutlet
|
||||
)
|
||||
|
||||
signupEnabled >- subscribeNext { [unowned self] valid in
|
||||
self.signupOutlet.enabled = valid
|
||||
self.signupOutlet.alpha = valid ? 1.0 : 0.5
|
||||
} >- disposeBag.addDisposable
|
||||
|
||||
|
||||
signingProcess >- subscribeNext { [unowned self] signingResult in
|
||||
switch signingResult {
|
||||
case .SigningUp:
|
||||
self.signingUpOulet.hidden = false
|
||||
case .SignedUp(let signed):
|
||||
self.signingUpOulet.hidden = true
|
||||
|
||||
let controller: UIAlertController
|
||||
if signed {
|
||||
controller = UIAlertController(title: "GitHub", message: "Mock signed up to GitHub", preferredStyle: .Alert)
|
||||
}
|
||||
else {
|
||||
controller = UIAlertController(title: "GitHub", message: "Mock signed up failed", preferredStyle: .Alert)
|
||||
}
|
||||
|
||||
controller.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
|
||||
self.presentViewController(controller, animated: true, completion: nil)
|
||||
default:
|
||||
self.signingUpOulet.hidden = true
|
||||
signupEnabled
|
||||
>- subscribeNext { [unowned self] valid in
|
||||
self.signupOutlet.enabled = valid
|
||||
self.signupOutlet.alpha = valid ? 1.0 : 0.5
|
||||
}
|
||||
} >- disposeBag.addDisposable
|
||||
>- disposeBag.addDisposable
|
||||
|
||||
|
||||
signingProcess
|
||||
>- subscribeNext { [unowned self] signingResult in
|
||||
switch signingResult {
|
||||
case .SigningUp:
|
||||
self.signingUpOulet.hidden = false
|
||||
case .SignedUp(let signed):
|
||||
self.signingUpOulet.hidden = true
|
||||
|
||||
let controller: UIAlertController
|
||||
|
||||
if signed {
|
||||
controller = UIAlertController(title: "GitHub", message: "Mock signed up to GitHub", preferredStyle: .Alert)
|
||||
}
|
||||
else {
|
||||
controller = UIAlertController(title: "GitHub", message: "Mock signed up failed", preferredStyle: .Alert)
|
||||
}
|
||||
|
||||
controller.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
|
||||
self.presentViewController(controller, animated: true, completion: nil)
|
||||
default:
|
||||
self.signingUpOulet.hidden = true
|
||||
}
|
||||
}
|
||||
>- disposeBag.addDisposable
|
||||
}
|
||||
|
||||
// This is one of the reasons why it's a good idea for disposal to be detached from allocations.
|
||||
|
@ -14,11 +14,11 @@ class SearchResultViewModel {
|
||||
let searchResult: WikipediaSearchResult
|
||||
|
||||
var title: Observable<String>
|
||||
var imageURLs: Observable<[NSURL]>
|
||||
|
||||
let API = DefaultWikipediaAPI.sharedAPI
|
||||
let $: Dependencies = Dependencies.sharedDependencies
|
||||
|
||||
var imageURLs: Observable<[NSURL]>
|
||||
|
||||
let API = DefaultWikipediaAPI.sharedAPI
|
||||
let $: Dependencies = Dependencies.sharedDependencies
|
||||
|
||||
init(searchResult: WikipediaSearchResult) {
|
||||
self.searchResult = searchResult
|
||||
|
||||
|
@ -20,27 +20,34 @@ class SearchViewModel: Disposable {
|
||||
// public methods
|
||||
|
||||
init(searchText: Observable<String>,
|
||||
selectedResult: Observable<SearchResultViewModel>) {
|
||||
|
||||
let $: Dependencies = Dependencies.sharedDependencies
|
||||
let wireframe = Dependencies.sharedDependencies.wireframe
|
||||
let API = DefaultWikipediaAPI.sharedAPI
|
||||
|
||||
self.rows = searchText >- throttle(300, $.mainScheduler) >- distinctUntilChanged >- map { query in
|
||||
API.getSearchResults(query)
|
||||
>- startWith([]) // clears results on new search term
|
||||
>- catch([])
|
||||
} >- switchLatest >- map { results in
|
||||
results.map {
|
||||
SearchResultViewModel(
|
||||
searchResult: $0
|
||||
)
|
||||
selectedResult: Observable<SearchResultViewModel>) {
|
||||
|
||||
let $: Dependencies = Dependencies.sharedDependencies
|
||||
let wireframe = Dependencies.sharedDependencies.wireframe
|
||||
let API = DefaultWikipediaAPI.sharedAPI
|
||||
|
||||
self.rows = searchText
|
||||
>- throttle(300, $.mainScheduler)
|
||||
>- distinctUntilChanged
|
||||
>- map { query in
|
||||
API.getSearchResults(query)
|
||||
>- startWith([]) // clears results on new search term
|
||||
>- catch([])
|
||||
}
|
||||
>- switchLatest
|
||||
>- map { results in
|
||||
results.map {
|
||||
SearchResultViewModel(
|
||||
searchResult: $0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
selectedResult >- subscribeNext { searchResult in
|
||||
wireframe.openURL(searchResult.searchResult.URL)
|
||||
} >- disposeBag.addDisposable
|
||||
|
||||
selectedResult
|
||||
>- subscribeNext { searchResult in
|
||||
wireframe.openURL(searchResult.searchResult.URL)
|
||||
}
|
||||
>- disposeBag.addDisposable
|
||||
}
|
||||
|
||||
func dispose() {
|
||||
|
@ -18,8 +18,8 @@ public class WikipediaSearchCell: UITableViewCell {
|
||||
@IBOutlet var imagesOutlet: UICollectionView!
|
||||
|
||||
var disposeBag: DisposeBag!
|
||||
|
||||
let imageService = DefaultImageService.sharedImageService
|
||||
|
||||
let imageService = DefaultImageService.sharedImageService
|
||||
|
||||
public override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
@ -44,7 +44,8 @@ public class WikipediaSearchCell: UITableViewCell {
|
||||
>- map { $0 as UIImage? }
|
||||
>- catch(nil)
|
||||
>- startWith(loadingPlaceholder)
|
||||
} >- disposeBag.addDisposable
|
||||
}
|
||||
>- disposeBag.addDisposable
|
||||
|
||||
self.disposeBag = disposeBag
|
||||
}
|
||||
|
@ -40,18 +40,22 @@ class WikipediaSearchViewController: ViewController {
|
||||
|
||||
// map table view rows
|
||||
// {
|
||||
viewModel.rows >- resultsTableView.rx_subscribeRowsToCellWithIdentifier("WikipediaSearchCell") { (_, _, viewModel, cell: WikipediaSearchCell) in
|
||||
cell.viewModel = viewModel
|
||||
} >- disposeBag.addDisposable
|
||||
viewModel.rows
|
||||
>- resultsTableView.rx_subscribeRowsToCellWithIdentifier("WikipediaSearchCell") { (_, _, viewModel, cell: WikipediaSearchCell) in
|
||||
cell.viewModel = viewModel
|
||||
}
|
||||
>- disposeBag.addDisposable
|
||||
// }
|
||||
|
||||
// dismiss keyboard on scroll
|
||||
// {
|
||||
resultsTableView.rx_contentOffset() >- subscribeNext { _ in
|
||||
if searchBar.isFirstResponder() {
|
||||
_ = searchBar.resignFirstResponder()
|
||||
resultsTableView.rx_contentOffset()
|
||||
>- subscribeNext { _ in
|
||||
if searchBar.isFirstResponder() {
|
||||
_ = searchBar.resignFirstResponder()
|
||||
}
|
||||
}
|
||||
} >- disposeBag.addDisposable
|
||||
>- disposeBag.addDisposable
|
||||
|
||||
disposeBag.addDisposable(viewModel)
|
||||
|
||||
|
@ -26,12 +26,12 @@ func URLEscape(pathSegment: String) -> String {
|
||||
}
|
||||
|
||||
class DefaultWikipediaAPI: WikipediaAPI {
|
||||
|
||||
static let sharedAPI = DefaultWikipediaAPI() // Singleton
|
||||
|
||||
let $: Dependencies = Dependencies.sharedDependencies
|
||||
|
||||
private init() {}
|
||||
|
||||
static let sharedAPI = DefaultWikipediaAPI() // Singleton
|
||||
|
||||
let $: Dependencies = Dependencies.sharedDependencies
|
||||
|
||||
private init() {}
|
||||
|
||||
// Example wikipedia response http://en.wikipedia.org/w/api.php?action=opensearch&search=Rx
|
||||
func getSearchResults(query: String) -> Observable<[WikipediaSearchResult]> {
|
||||
@ -39,11 +39,14 @@ class DefaultWikipediaAPI: WikipediaAPI {
|
||||
let urlContent = "http://en.wikipedia.org/w/api.php?action=opensearch&search=\(escapedQuery)"
|
||||
let url = NSURL(string: urlContent)!
|
||||
|
||||
return $.URLSession.rx_JSON(url) >- observeSingleOn($.backgroundWorkScheduler) >- mapOrDie { json in
|
||||
return castOrFail(json) >== { (json: [AnyObject]) in
|
||||
return WikipediaSearchResult.parseJSON(json)
|
||||
return $.URLSession.rx_JSON(url)
|
||||
>- observeSingleOn($.backgroundWorkScheduler)
|
||||
>- mapOrDie { json in
|
||||
return castOrFail(json) >== { (json: [AnyObject]) in
|
||||
return WikipediaSearchResult.parseJSON(json)
|
||||
}
|
||||
}
|
||||
} >- observeSingleOn($.mainScheduler)
|
||||
>- observeSingleOn($.mainScheduler)
|
||||
}
|
||||
|
||||
// http://en.wikipedia.org/w/api.php?action=parse&page=rx&format=json
|
||||
@ -55,10 +58,12 @@ class DefaultWikipediaAPI: WikipediaAPI {
|
||||
return failWith(apiError("Can't create url"))
|
||||
}
|
||||
|
||||
return $.URLSession.rx_JSON(url!) >- mapOrDie { jsonResult in
|
||||
return castOrFail(jsonResult) >== { (json: NSDictionary) in
|
||||
return WikipediaPage.parseJSON(json)
|
||||
return $.URLSession.rx_JSON(url!)
|
||||
>- mapOrDie { jsonResult in
|
||||
return castOrFail(jsonResult) >== { (json: NSDictionary) in
|
||||
return WikipediaPage.parseJSON(json)
|
||||
}
|
||||
}
|
||||
} >- observeSingleOn($.mainScheduler)
|
||||
>- observeSingleOn($.mainScheduler)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user