Невозможно получить Data с помощью Combine, на консоли ничего не печатается.
struct RepositoryElement: Codable {}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://api.github.com/users/brunosilva808/repos")!
let repos = URLSession.shared.dataTaskPublisher(for: url)
.map { $0.data }
.decode(type: [Repository].self, decoder: JSONDecoder())
.sink(receiveCompletion: { completion in // 5
print(completion)
}, receiveValue: { repositories in
print("brunosilva808 has \(repositories.count) repositories")
})
}
}
@ Андрей, это полный код. Итак, это может быть проблемой





Это не работает, потому что ваша переменная repo выходит за рамки, и, следовательно, ваш сетевой запрос отменяется. Вам нужно удержать свой запрос, поэтому создайте переменную в своем ViewController, чтобы удерживать его.
Если вы сделаете что-то подобное, то это должно сработать. Вам нужно будет импортировать Combine, потому что AnyCancellable является частью Combine.
import Combine
class ViewController: UIViewController {
var cancellable: AnyCancellable?
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://api.github.com/users/brunosilva808/repos")!
cancellable = URLSession.shared.dataTaskPublisher(for: url)
.map { $0.data }
.decode(type: [Repository].self, decoder: JSONDecoder())
.sink(receiveCompletion: { completion in // 5
print(completion)
}, receiveValue: { repositories in
print("brunosilva808 has \(repositories.count) repositories")
})
}
}
Я не мог проверить, правильно ли он декодируется, потому что вы не включили структуру репозитория.
Где вы храните аннулируемую бумагу?