Skip to content

Commit b47f17b

Browse files
committed
Add model(at: Int) -> Any and ViewDataSource
1 parent f55c3f6 commit b47f17b

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

Rx.xcodeproj/project.pbxproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@
8989
A5CD038A1F1660F40005A376 /* RxPickerViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CD03891F1660F40005A376 /* RxPickerViewAdapter.swift */; };
9090
A5CD038C1F1660F40005A376 /* RxPickerViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CD03891F1660F40005A376 /* RxPickerViewAdapter.swift */; };
9191
A5CD038D1F1660F40005A376 /* RxPickerViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CD03891F1660F40005A376 /* RxPickerViewAdapter.swift */; };
92+
A5CD03BF1F18C65F0005A376 /* ViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CD03BE1F18C65F0005A376 /* ViewDataSourceType.swift */; };
93+
A5CD03C01F18C65F0005A376 /* ViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CD03BE1F18C65F0005A376 /* ViewDataSourceType.swift */; };
94+
A5CD03C11F18C65F0005A376 /* ViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CD03BE1F18C65F0005A376 /* ViewDataSourceType.swift */; };
95+
A5CD03C21F18C65F0005A376 /* ViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CD03BE1F18C65F0005A376 /* ViewDataSourceType.swift */; };
9296
AAE623761C82475700FC7801 /* UIProgressView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAE623751C82475700FC7801 /* UIProgressView+Rx.swift */; };
9397
AAE623771C82475700FC7801 /* UIProgressView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAE623751C82475700FC7801 /* UIProgressView+Rx.swift */; };
9498
B44D73EC1EE6D4A300EBFBE8 /* UIViewController+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271A97421CFC99FE00D64125 /* UIViewController+RxTests.swift */; };
@@ -1715,6 +1719,7 @@
17151719
A520FFF61F0D258E00573734 /* RxPickerViewDataSourceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxPickerViewDataSourceType.swift; sourceTree = "<group>"; };
17161720
A520FFFB1F0D291500573734 /* RxPickerViewDataSourceProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxPickerViewDataSourceProxy.swift; sourceTree = "<group>"; };
17171721
A5CD03891F1660F40005A376 /* RxPickerViewAdapter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxPickerViewAdapter.swift; sourceTree = "<group>"; };
1722+
A5CD03BE1F18C65F0005A376 /* ViewDataSourceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewDataSourceType.swift; sourceTree = "<group>"; };
17181723
AAE623751C82475700FC7801 /* UIProgressView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIProgressView+Rx.swift"; sourceTree = "<group>"; };
17191724
C809396D1B8A71760088E94D /* RxCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };
17201725
C80939E71B8A71840088E94D /* RxCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -2538,6 +2543,7 @@
25382543
C8D132431C42D15E00B59FFF /* SectionedViewDataSourceType.swift */,
25392544
C88F76801CE5341700D5A014 /* TextInput.swift */,
25402545
C89AB1A51DAAC25A0065FBE6 /* RxCocoaObjCRuntimeError+Extensions.swift */,
2546+
A5CD03BE1F18C65F0005A376 /* ViewDataSourceType.swift */,
25412547
);
25422548
path = Common;
25432549
sourceTree = "<group>";
@@ -4017,6 +4023,7 @@
40174023
C89AB1A61DAAC25A0065FBE6 /* RxCocoaObjCRuntimeError+Extensions.swift in Sources */,
40184024
C88254161B8A752B00B02D69 /* RxCollectionViewReactiveArrayDataSource.swift in Sources */,
40194025
C89AB2221DAAC3350065FBE6 /* URLSession+Rx.swift in Sources */,
4026+
A5CD03BF1F18C65F0005A376 /* ViewDataSourceType.swift in Sources */,
40204027
846436E31C9AF65B0035B40D /* RxSearchControllerDelegateProxy.swift in Sources */,
40214028
C882541F1B8A752B00B02D69 /* RxCollectionViewDelegateProxy.swift in Sources */,
40224029
46307D4E1CDE77D800E47A1C /* UIAlertAction+Rx.swift in Sources */,
@@ -4119,6 +4126,7 @@
41194126
C89AB21F1DAAC3350065FBE6 /* NSObject+Rx.swift in Sources */,
41204127
C86781B01DB823B500B2029A /* NSView+Rx.swift in Sources */,
41214128
C89AB1741DAAC1680065FBE6 /* ControlTarget.swift in Sources */,
4129+
A5CD03C01F18C65F0005A376 /* ViewDataSourceType.swift in Sources */,
41224130
C86781971DB823B500B2029A /* NSButton+Rx.swift in Sources */,
41234131
C89AB2131DAAC3350065FBE6 /* NotificationCenter+Rx.swift in Sources */,
41244132
C8BCD3F51C14B6D1005F1280 /* NSLayoutConstraint+Rx.swift in Sources */,
@@ -5241,6 +5249,7 @@
52415249
C89AB2091DAAC3350065FBE6 /* KVORepresentable+Swift.swift in Sources */,
52425250
C8F0C0311BBBFBB9001B112F /* DelegateProxy.swift in Sources */,
52435251
C8F0C0331BBBFBB9001B112F /* UISwitch+Rx.swift in Sources */,
5252+
A5CD03C21F18C65F0005A376 /* ViewDataSourceType.swift in Sources */,
52445253
C8F0C0351BBBFBB9001B112F /* UICollectionView+Rx.swift in Sources */,
52455254
C8F0C0361BBBFBB9001B112F /* RxCollectionViewDataSourceType.swift in Sources */,
52465255
C89AB1F91DAAC3350065FBE6 /* SharedSequence.swift in Sources */,
@@ -5369,6 +5378,7 @@
53695378
C89AB2141DAAC3350065FBE6 /* NotificationCenter+Rx.swift in Sources */,
53705379
91BE429D1CBF7EC000F6B062 /* UIPageControl+Rx.swift in Sources */,
53715380
C89AB2521DAAC3A60065FBE6 /* _RXObjCRuntime.m in Sources */,
5381+
A5CD03C11F18C65F0005A376 /* ViewDataSourceType.swift in Sources */,
53725382
D203C4FE1BB9C53700D02D00 /* RxTableViewDataSourceProxy.swift in Sources */,
53735383
D203C5001BB9C53700D02D00 /* RxTextViewDelegateProxy.swift in Sources */,
53745384
844BC8AD1CE4FA6400F5C7CB /* RxPickerViewDelegateProxy.swift in Sources */,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// ViewDataSourceType.swift
3+
// RxCocoa
4+
//
5+
// Created by Sergey Shulga on 14/07/2017.
6+
// Copyright © 2017 Krunoslav Zaher. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
/// Data source with access to underlying model.
12+
public protocol ViewDataSourceType {
13+
/// Returns model at index.
14+
///
15+
/// In case data source doesn't contain any items when this method is being called, `RxCocoaError.ItemsNotYetBound(object: self)` is thrown.
16+
17+
/// - parameter index: Model index
18+
/// - returns: Model at index.
19+
func model(at index: Int) throws -> Any
20+
}

RxCocoa/iOS/DataSources/RxPickerViewAdapter.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,16 @@
1212
import RxSwift
1313
#endif
1414

15-
private class RxPickerViewArrayDataSource<T>: NSObject, UIPickerViewDataSource {
15+
class RxPickerViewArrayDataSource<T>: NSObject, UIPickerViewDataSource, ViewDataSourceType {
1616
fileprivate var items: [T] = []
1717

18+
func model(at index: Int) throws -> Any {
19+
guard items.indices ~= index else {
20+
throw RxCocoaError.itemsNotYetBound(object: self)
21+
}
22+
return items[index]
23+
}
24+
1825
func numberOfComponents(in pickerView: UIPickerView) -> Int {
1926
return 1
2027
}

0 commit comments

Comments
 (0)