Skip to content

Commit

Permalink
Update CI to include Xcode 12 (#266)
Browse files Browse the repository at this point in the history
* Update CI to include Xcode 12

* Use CurrentValueSubject
  • Loading branch information
stephencelis committed Aug 27, 2020
1 parent 6db4cf3 commit 13cb3c3
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 22 deletions.
4 changes: 1 addition & 3 deletions .github/workflows/ci.yml
Expand Up @@ -15,10 +15,8 @@ jobs:
matrix:
xcode:
- 11.3
- 11.4
- 11.5
- 11.6
#- 12_beta
- 12_beta
steps:
- uses: actions/checkout@v2
- name: Select Xcode ${{ matrix.xcode }}
Expand Down
22 changes: 11 additions & 11 deletions Sources/ComposableArchitecture/Store.swift
Expand Up @@ -7,7 +7,7 @@ import Foundation
/// You will typically construct a single one of these at the root of your application, and then use
/// the `scope` method to derive more focused stores that can be passed to subviews.
public final class Store<State, Action> {
@Published private(set) var state: State
var state: CurrentValueSubject<State, Never>
var effectCancellables: [UUID: AnyCancellable] = [:]
private var isSending = false
private var parentCancellable: AnyCancellable?
Expand Down Expand Up @@ -60,15 +60,15 @@ public final class Store<State, Action> {
action fromLocalAction: @escaping (LocalAction) -> Action
) -> Store<LocalState, LocalAction> {
let localStore = Store<LocalState, LocalAction>(
initialState: toLocalState(self.state),
initialState: toLocalState(self.state.value),
reducer: { localState, localAction in
self.send(fromLocalAction(localAction))
localState = toLocalState(self.state)
localState = toLocalState(self.state.value)
return .none
}
)
localStore.parentCancellable = self.$state
.sink { [weak localStore] newValue in localStore?.state = toLocalState(newValue) }
localStore.parentCancellable = self.state
.sink { [weak localStore] newValue in localStore?.state.value = toLocalState(newValue) }
return localStore
}

Expand Down Expand Up @@ -102,20 +102,20 @@ public final class Store<State, Action> {
return localState
}

return toLocalState(self.$state.eraseToAnyPublisher())
return toLocalState(self.state.eraseToAnyPublisher())
.map { localState in
let localStore = Store<LocalState, LocalAction>(
initialState: localState,
reducer: { localState, localAction in
self.send(fromLocalAction(localAction))
localState = extractLocalState(self.state) ?? localState
localState = extractLocalState(self.state.value) ?? localState
return .none
})

localStore.parentCancellable = self.$state
localStore.parentCancellable = self.state
.sink { [weak localStore] state in
guard let localStore = localStore else { return }
localStore.state = extractLocalState(state) ?? localStore.state
localStore.state.value = extractLocalState(state) ?? localStore.state.value
}
return localStore
}
Expand Down Expand Up @@ -163,7 +163,7 @@ public final class Store<State, Action> {
)
}
self.isSending = true
let effect = self.reducer(&self.state, action)
let effect = self.reducer(&self.state.value, action)
self.isSending = false

var didComplete = false
Expand Down Expand Up @@ -207,7 +207,7 @@ public final class Store<State, Action> {
reducer: @escaping (inout State, Action) -> Effect<Action, Never>
) {
self.reducer = reducer
self.state = initialState
self.state = CurrentValueSubject(initialState)
}
}

Expand Down
2 changes: 1 addition & 1 deletion Sources/ComposableArchitecture/UIKit/IfLetUIKit.swift
Expand Up @@ -52,7 +52,7 @@ extension Store {
}
)
.sink { store in
if store.state == nil { `else`() }
if store.state.value == nil { `else`() }
}

let unwrapCancellable =
Expand Down
4 changes: 2 additions & 2 deletions Sources/ComposableArchitecture/ViewStore.swift
Expand Up @@ -58,9 +58,9 @@ public final class ViewStore<State, Action>: ObservableObject {
_ store: Store<State, Action>,
removeDuplicates isDuplicate: @escaping (State, State) -> Bool
) {
let publisher = store.$state.removeDuplicates(by: isDuplicate)
let publisher = store.state.removeDuplicates(by: isDuplicate)
self.publisher = StorePublisher(publisher)
self.state = store.state
self.state = store.state.value
self._send = store.send
self.viewCancellable = publisher.sink { [weak self] in self?.state = $0 }
}
Expand Down
10 changes: 5 additions & 5 deletions Tests/ComposableArchitectureTests/StoreTests.swift
Expand Up @@ -57,7 +57,7 @@ final class StoreTests: XCTestCase {
let childStore = parentStore.scope(state: String.init)

var values: [String] = []
childStore.$state
childStore.state
.sink(receiveValue: { values.append($0) })
.store(in: &self.cancellables)

Expand All @@ -79,7 +79,7 @@ final class StoreTests: XCTestCase {
let childViewStore = ViewStore(childStore)

var values: [Int] = []
parentStore.$state
parentStore.state
.sink(receiveValue: { values.append($0) })
.store(in: &self.cancellables)

Expand All @@ -102,7 +102,7 @@ final class StoreTests: XCTestCase {
parentStore
.scope(state: { $0.map { "\($0)" }.removeDuplicates() })
.sink { childStore in
childStore.$state
childStore.state
.sink { outputs.append($0) }
.store(in: &self.cancellables)
}
Expand Down Expand Up @@ -246,7 +246,7 @@ final class StoreTests: XCTestCase {

parentStore
.scope { $0.removeDuplicates() }
.sink { outputs.append($0.state) }
.sink { outputs.append($0.state.value) }
.store(in: &self.cancellables)

XCTAssertEqual(outputs, [0])
Expand Down Expand Up @@ -285,7 +285,7 @@ final class StoreTests: XCTestCase {
.ifLet(
then: { store in
stores.append(store)
outputs.append(store.state)
outputs.append(store.state.value)
},
else: {
outputs.append(nil)
Expand Down

0 comments on commit 13cb3c3

Please sign in to comment.