6
6
// Copyright © 2015 Swinject Contributors. All rights reserved.
7
7
//
8
8
9
- import ReactiveCocoa
9
+ import ReactiveSwift
10
+ import Result
10
11
import ExampleModel
11
12
12
13
public final class ImageDetailViewModel : ImageDetailViewModeling {
13
- public var id : AnyProperty < UInt64 ? > { return AnyProperty ( _id) }
14
- public var pageImageSizeText : AnyProperty < String ? > { return AnyProperty ( _pageImageSizeText) }
15
- public var tagText : AnyProperty < String ? > { return AnyProperty ( _tagText) }
16
- public var usernameText : AnyProperty < String ? > { return AnyProperty ( _usernameText) }
17
- public var viewCountText : AnyProperty < String ? > { return AnyProperty ( _viewCountText) }
18
- public var downloadCountText : AnyProperty < String ? > { return AnyProperty ( _downloadCountText) }
19
- public var likeCountText : AnyProperty < String ? > { return AnyProperty ( _likeCountText) }
20
- public var image : AnyProperty < UIImage ? > { return AnyProperty ( _image) }
14
+ public var id : Property < UInt64 ? > { return Property ( _id) }
15
+ public var pageImageSizeText : Property < String ? > { return Property ( _pageImageSizeText) }
16
+ public var tagText : Property < String ? > { return Property ( _tagText) }
17
+ public var usernameText : Property < String ? > { return Property ( _usernameText) }
18
+ public var viewCountText : Property < String ? > { return Property ( _viewCountText) }
19
+ public var downloadCountText : Property < String ? > { return Property ( _downloadCountText) }
20
+ public var likeCountText : Property < String ? > { return Property ( _likeCountText) }
21
+ public var image : Property < UIImage ? > { return Property ( _image) }
21
22
22
- private let _id = MutableProperty < UInt64 ? > ( nil )
23
- private let _pageImageSizeText = MutableProperty < String ? > ( nil )
24
- private let _tagText = MutableProperty < String ? > ( nil )
25
- private let _usernameText = MutableProperty < String ? > ( nil )
26
- private let _viewCountText = MutableProperty < String ? > ( nil )
27
- private let _downloadCountText = MutableProperty < String ? > ( nil )
28
- private let _likeCountText = MutableProperty < String ? > ( nil )
29
- private let _image = MutableProperty < UIImage ? > ( nil )
23
+ fileprivate let _id = MutableProperty < UInt64 ? > ( nil )
24
+ fileprivate let _pageImageSizeText = MutableProperty < String ? > ( nil )
25
+ fileprivate let _tagText = MutableProperty < String ? > ( nil )
26
+ fileprivate let _usernameText = MutableProperty < String ? > ( nil )
27
+ fileprivate let _viewCountText = MutableProperty < String ? > ( nil )
28
+ fileprivate let _downloadCountText = MutableProperty < String ? > ( nil )
29
+ fileprivate let _likeCountText = MutableProperty < String ? > ( nil )
30
+ fileprivate let _image = MutableProperty < UIImage ? > ( nil )
30
31
31
- internal var locale = NSLocale . currentLocale ( ) // For testing.
32
- private var imageEntities = [ ImageEntity] ( )
33
- private var currentImageIndex = 0
34
- private var ( stopSignalProducer , stopSignalObserver ) = SignalProducer < ( ) , NoError > . buffer ( )
32
+ internal var locale = Locale . current // For testing.
33
+ fileprivate var imageEntities = [ ImageEntity] ( )
34
+ fileprivate var currentImageIndex = 0
35
+ fileprivate var stop = MutableProperty < Void > ( )
35
36
36
- private let network : Networking
37
- private let externalAppChannel : ExternalAppChanneling
37
+ fileprivate let network : Networking
38
+ fileprivate let externalAppChannel : ExternalAppChanneling
38
39
39
40
public init ( network: Networking , externalAppChannel: ExternalAppChanneling ) {
40
41
self . network = network
@@ -43,19 +44,19 @@ public final class ImageDetailViewModel: ImageDetailViewModeling {
43
44
44
45
public func openImagePage( ) {
45
46
if let currentImageEntity = currentImageEntity {
46
- externalAppChannel. openURL ( currentImageEntity. pageURL)
47
+ externalAppChannel. openURL ( url : currentImageEntity. pageURL)
47
48
}
48
49
}
49
50
50
- private var currentImageEntity : ImageEntity ? {
51
+ fileprivate var currentImageEntity : ImageEntity ? {
51
52
return imageEntities. indices. contains ( currentImageIndex) ? imageEntities [ currentImageIndex] : nil
52
53
}
53
54
}
54
55
55
56
extension ImageDetailViewModel : ImageDetailViewModelModifiable {
56
- public func update( imageEntities: [ ImageEntity ] , atIndex index: Int ) {
57
- stopSignalObserver . sendNext ( ( ) )
58
- ( stopSignalProducer , stopSignalObserver ) = SignalProducer < ( ) , NoError > . buffer ( )
57
+ public func update( _ imageEntities: [ ImageEntity ] , atIndex index: Int ) {
58
+ stop . value = ( )
59
+ stop = MutableProperty < Void > ( )
59
60
60
61
self . imageEntities = imageEntities
61
62
currentImageIndex = index
@@ -64,23 +65,23 @@ extension ImageDetailViewModel: ImageDetailViewModelModifiable {
64
65
self . _id. value = imageEntity? . id
65
66
self . _usernameText. value = imageEntity? . username
66
67
self . _pageImageSizeText. value = imageEntity. map { " \( $0. pageImageWidth) x \( $0. pageImageHeight) " }
67
- self . _tagText. value = imageEntity. map { $0. tags. joinWithSeparator ( " , " ) }
68
+ self . _tagText. value = imageEntity. map { $0. tags. joined ( separator : " , " ) }
68
69
self . _viewCountText. value = imageEntity. map { formatInt64 ( $0. viewCount) }
69
70
self . _downloadCountText. value = imageEntity. map { formatInt64 ( $0. downloadCount) }
70
71
self . _likeCountText. value = imageEntity. map { formatInt64 ( $0. likeCount) }
71
72
72
73
_image. value = nil
73
74
if let imageEntity = imageEntity {
74
- _image <~ network. requestImage ( imageEntity. imageURL)
75
- . takeUntil ( stopSignalProducer )
75
+ _image <~ network. requestImage ( url : imageEntity. imageURL)
76
+ . take ( until : stop . producer )
76
77
. map { $0 as UIImage ? }
77
78
. flatMapError { _ in SignalProducer < UIImage ? , NoError > ( value: nil ) }
78
- . observeOn ( UIScheduler ( ) )
79
+ . observe ( on : UIScheduler ( ) )
79
80
}
80
81
}
81
82
82
- private func formatInt64( value: Int64 ) -> String {
83
- return NSNumber ( longLong : value) . descriptionWithLocale ( locale)
83
+ fileprivate func formatInt64( _ value: Int64 ) -> String {
84
+ return NSNumber ( value : value as Int64 ) . description ( withLocale : locale)
84
85
}
85
86
86
87
// This method can be used if you add next and previsou buttons on image detail view
0 commit comments