Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. import UIKit
  2.  
  3. class CharacterFavoriteView: FavoriteView {
  4.  
  5. let realmManager = RealmManager()
  6. var character: Character?
  7.  
  8. override init(frame: CGRect) {
  9. super.init(frame: frame)
  10. addNotifications()
  11. }
  12.  
  13. deinit {
  14. removeNotifications()
  15. }
  16.  
  17. required init?(coder aDecoder: NSCoder) {
  18. fatalError("init(coder:) has not been implemented")
  19. }
  20.  
  21. func setup(with character: Character) {
  22. self.character = character
  23.  
  24. self.viewState = .notFavourited
  25. realmManager.isFavorite(character: character)
  26. .subscribe(onNext: { [weak self] _ in
  27. self?.viewState = .favourited
  28. }).dispose()
  29.  
  30. didFavorite = { [weak self] in
  31. self?.realmManager.favorite(character: character)
  32. self?.postFavoriteStatusChangedNotification()
  33. }
  34.  
  35. didUnfavorite = { [weak self] in
  36. self?.realmManager.unfavorite(character: character)
  37. self?.postFavoriteStatusChangedNotification()
  38. }
  39. }
  40.  
  41. func favoriteStatusChanged() {
  42. if let character = character {
  43. self.viewState = .notFavourited
  44. realmManager.isFavorite(character: character)
  45. .subscribe(onNext: { [weak self] _ in
  46. self?.viewState = .favourited
  47. }).dispose()
  48. }
  49. }
  50.  
  51. }
  52.  
  53. extension CharacterFavoriteView {
  54. fileprivate func removeNotifications() {
  55. NotificationCenter.default.removeObserver(target, name: NSNotification.Name(rawValue: "FavoriteStatusChanged"), object: nil)
  56. }
  57.  
  58. fileprivate func postFavoriteStatusChangedNotification() {
  59. NotificationCenter.default.post(name: Notification.Name("FavoriteStatusChanged"), object: nil)
  60. }
  61.  
  62. fileprivate func addNotifications() {
  63. NotificationCenter.default.addObserver(
  64. self,
  65. selector: #selector(favoriteStatusChanged),
  66. name: NSNotification.Name(rawValue: "FavoriteStatusChanged"),
  67. object: nil)
  68. }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement