данные с YouTube не передаются с использованием делегата - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу получить данные с YouTube с домашнего контроллера и передать свои данные на мой видеоконтроллер, но данные не передаются на мой видеоконтроллер.но данные находятся в домашнем контроллере, когда я пытаюсь его распечатать.это мой код

это мой протокол, который я поставил выше класса домашнего контроллера

protocol VideoListDelegate: class {
    func didAddVideoItem(results: [SearchResult])
}

, и это мой представитель в моем классе домашнего контроллера

weak var delegate: VideoListDelegate?

этомой API вызывается в домашнем контроллере

private func youtubeAPI(with query: Method) {
    let request = SearchListRequest(part: [.id, .snippet], maxResults: 50, searchQuery: query.rawValue)

    ApiSession.shared.send(request) { (results) in
        if let err = results.error {
            print("? -- Failed to get data -- ?")
            print("? -- \(err) -- ?")
            return
        }

        if let result = results.value?.items {
            self.delegate?.didAddVideoItem(results: result)
        }

        let layout = UICollectionViewFlowLayout()
        let searchVideoController = VideoController(collectionViewLayout: layout)

        self.navigationController?.pushViewController(searchVideoController, animated: true)
    }
}

, а затем я подгоняю свой видеоконтроллер к моему протоколу

class VideoController: UICollectionViewController, UICollectionViewDelegateFlowLayout, VideoListDelegate {

// Add video into video array
func didAddVideoItem(results: [SearchResult]) {
    for item in results {
        print(item.snippet.title)

        let video = Video(title: item.snippet.title, videoId: item.id.videoID ?? "")
        self.videos.append(video)
    }

    DispatchQueue.main.async {
        self.collectionView.reloadData()
    }
  }
}

1 Ответ

0 голосов
/ 11 февраля 2019

Ваш метод API должен быть таким, тогда вам не потребуется делегирование для передачи данных:

private func youtubeAPI(with query: Method) {
    let request = SearchListRequest(part: [.id, .snippet], maxResults: 50, searchQuery: query.rawValue)

    ApiSession.shared.send(request) { (results) in
        if let err = results.error {
            print("? -- Failed to get data -- ?")
            print("? -- \(err) -- ?")
            return
        }

        let layout = UICollectionViewFlowLayout()
        let searchVideoController = VideoController(collectionViewLayout: layout)
        searchVideoController.results = results.value?.items ?? []
        self.navigationController?.pushViewController(searchVideoController, animated: true)
    }
}

И в вашем VideoViewController добавьте одну переменную results типа [SearchResult].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...