Итак, у меня есть эта строгая функция, которая вызывает издателя Combine с целью передачи результатов другой функции. Я получаю следующую ошибку:
Мой фрагмент кода:
public func execute(state: FluxState?, dispatch: @escaping DispatchFunction) {
let config = Popular(country: .usa, genres: nil)
subscriptions = []
let params = [
"page": "\(self.page)",
"per_page": "\(20)"
]
print("on page \(self.page)")
var moviesResult = [Movie]()
SwiftRecommendations.APIService.shared
.getMovies(settings: config, params: params)
//.receive(on: DispatchQueue.main)
.sink(receiveCompletion: { (completion) in
if case let .failure(error) = completion {
print("error \(error)")
} else {
self.popularMovies = moviesResult
dispatch(SetMovieMenuList(page: self.page,
list: MovieSwift.MoviesMenu.popular,
response: moviesResult))
}
}, receiveValue: { [unowned self] in
moviesResult = $0
})
.store(in: &self.subscriptions)
}
}
Фрагмент SetMovieMenuList
:
class SetMovieMenuList: Action {
let page: Int
let list: MoviesMenu
let response: [Movie]
}
Функция отправки — это состояние SwiftFlux, а APIService — это структура. Не уверен, что мне нужно предоставить какую-либо дополнительную информацию, но я хотел посмотреть, был ли это способ структурировать это или как мне использовать subscriptions
и сохранить список фильмов в этом сценарии.
Спасибо
self
внутри замыкания не совпадает сself
вне замыкания. Любая мутация, которую вы делаете внутри замыкания, не будет видна снаружи. Если вам нужно иметь несколько ссылок на один и тот же объект, вам нужен ссылочный тип (класс). - person Rob Napier   schedule 10.01.2020SetMovieMenuList
на класс, устанавливаюFetchMoviesMenuList
иMoviesAction
также на класс, ошибка исчезает, но происходит сбой в том же блоке кода из-за уже нераспределенной ссылки. - person Doz   schedule 10.01.2020receive(on:)
в свою цепочку, чтобы убедиться, что обработка выполняется в очереди, которую вы ожидаете. - person Rob Napier   schedule 10.01.2020receive(on:)
потоком, но что касается структуры и класса, какой подход я должен использовать, и что должно/может быть структурой, что должно/может быть классом в этом рабочем процессе - person Doz   schedule 10.01.2020MoviesActions.subscriptions
, также настоятельно предполагает, что это должен быть класс (но это очень сбивает с толку, потому что похоже, что.subscriptions
является статическим свойством, что также кажется очень неправильным). - person Rob Napier   schedule 10.01.2020subscriptions
как статический, потому что он в структуре и получил эту собственную ошибку. Но похоже, что я должен ссылаться и иметь только одну ссылку, а не значения... Спасибо! - person Doz   schedule 10.01.2020Unsafe
типов. В противном случае Swift безопасен и не сможет неправильно обращаться к памяти. Однако чаще сбой является утверждением, и вам следует внимательно читать напечатанные сообщения. - person Rob Napier   schedule 10.01.2020