マイルストーンからを介して課題を解決しようとしCombine
ましたが、エラーが発生しました:
Value of type 'Published<[User]>.Publisher' has no member 'store'
ソースコード:
import Combine
import Foundation
// MARK: Main model from API
struct User: Decodable, Identifiable {
let id: UUID
let isActive: Bool
let name: String
let age: Int
let company: String
let email: String
let address: String
let about: String
let registered: Date
let tags: [String]
let friends: [Friend]
}
// MARK: - Friend array API
struct Friend: Decodable {
let id: String
let name: String
}
final class ViewModel: ObservableObject {
@Published var model = [User]()
private var subscriptions: Set<AnyCancellable> = []
// Error: Value of type 'Published<[User]>.Publisher' has no member 'store'
init() { $model.store(in: &subscriptions )}
}
extension ViewModel {
// MARK: - Make request to API
func fetch() -> AnyPublisher<User, Error> {
guard let mainURL = URL(string: "https://www.hackingwithswift.com/samples/friendface.json") else {
fatalError("404: Not found")
}
return URLSession.shared.dataTaskPublisher(for: mainURL)
.map(\.data)
.decode(type: User.self, decoder: JSONDecoder())
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}
}
わかりません。どこにパブリッシャーを作成する必要がありますか?
他のコードを考慮して、ここに使用法があります(Xcode 11.4でコンパイルされています)
init() {
self.fetch()
.sink(receiveCompletion: { _ in
// do here whatever needed with error
}, receiveValue: { [weak self] user in
self?.model.append(user)
})
.store(in: &subscriptions)
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加