DataAPIを用いてYoutubeの動画をまとめたアプリを作るために、GetDataという名前の、レスポンスをプロパティに保存しておくクラスを仲介して、BaseViewControllerから、PageViewControllerという名前の、ページを表示するViewControllerに動画の情報を渡して表示をしようと試みています。
以下のコードをシミュレーターで実行したところ、PageViewControllerのtableViewに何も表示されませんでした。レスポンスの取得はできております。そのため、PageViewControllerへの遷移がうまく行われていないと判断しましたが、どのようにすれば遷移できるのか、ご教授お願いします。基本もあまりできていない初心者ですが、よろしくお願い致します。
GetDataクラスです
Swift
1import Foundation 2import Alamofire 3import SwiftyJSON 4 5class GetData { 6 7 var publishedAtArray = [String]() 8 var titleArray = [String]() 9 var imageURLStringArray = [String]() 10 var youtubeURLArray = [String]() 11 var channelTitleArray = [String]() 12 var videoIdArray = [String]() 13 14 func getData(text: String) { 15 16 let url = text.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 17 let parameters = ["part": "snippet"] 18 AF.request(url!, parameters: parameters, encoder: URLEncodedFormParameterEncoder.default).response { (response) in 19 switch response.result { 20 case .success: 21 for i in 0...18 { 22 23 let json: JSON = JSON(response.data as Any) 24 let videoId = json["items"][i]["id"]["videoId"].string! 25 let title = json["items"][i]["snippet"]["title"].string! 26 let imageURLString = json["items"][i]["snippet"]["thumbnails"]["default"]["url"].string 27 let youtubeURL = "https://www.youtube.com/watch?v=(videoId)" 28 let channelTitle = json["items"][i]["snippet"]["channelTitle"].string 29 30 self.videoIdArray.append(videoId) 31 self.titleArray.append(title) 32 self.imageURLStringArray.append(imageURLString!) 33 self.youtubeURLArray.append(youtubeURL) 34 self.channelTitleArray.append(channelTitle!) 35 36 } 37 break 38 case .failure(let error): 39 print(error) 40 break 41 } 42 } 43 } 44}
BaseViewControllerです
Swift
1import UIKit 2import SegementSlide 3 4class BaseViewController: SegementSlideViewController { 5 6 let data = GetData() 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 reloadData() 11 scrollToSlide(at: 0, animated: true) 12 } 13 14 override var headerView: UIView?{ 15 16 let headerView = UIImageView() 17 headerView.isUserInteractionEnabled = true 18 headerView.contentMode = .scaleAspectFit 19 headerView.image = UIImage(named: "header") 20 let headerHeight: CGFloat 21 if #available(iOS 11.0, *) { 22 headerHeight = view.frame.height/4 + view.safeAreaInsets.top 23 } else { 24 headerHeight = view.frame.height/4 + topLayoutGuide.length 25 } 26 27 headerView.heightAnchor.constraint(equalToConstant: headerHeight).isActive = true 28 29 return headerView 30 } 31 32 override var titlesInSwitcher: [String]{ 33 return ["ボーダーコリー","ニュース","天気","ペット","かわいい動物","神社"] 34 } 35 36 override func segementSlideContentViewController(at index: Int) -> SegementSlideContentScrollViewDelegate? { 37 switch index { 38 case 0: 39 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=ボーダーコリー&part=snippet&maxResults=19&order=date") 40 return PageViewController() 41 42 case 1: 43 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=ニュース&part=snippet&maxResults=19&order=date") 44 return PageViewController() 45 46 case 2: 47 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=天気&part=snippet&maxResults=19&order=date") 48 return PageViewController() 49 50 case 3: 51 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=ペット&part=snippet&maxResults=19&order=date") 52 return PageViewController() 53 54 case 4: 55 data.getData(text:"https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=かわいい動物&part=snippet&maxResults=19&order=date") 56 return PageViewController() 57 58 case 5: 59 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=神社&part=snippet&maxResults=19&order=date") 60 return PageViewController() 61 62 default: 63 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=音楽&part=snippet&maxResults=19&order=date") 64 return PageViewController() 65 66 } 67 } 68} 69
PageViewControllerです
Swift
1import UIKit 2import SegementSlide 3import Alamofire 4import SDWebImage 5import SwiftyJSON 6 7class PageViewController: UITableViewController, SegementSlideContentScrollViewDelegate { 8 9 let data = GetData() 10 let refresh = UIRefreshControl() 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 tableView.refreshControl = refresh 15 refresh.addTarget(self, action: #selector(update), for: .valueChanged) 16 } 17 18 @objc func update(){ 19 tableView.reloadData() 20 refresh.endRefreshing() 21 } 22 23 @objc var scrollView: UIScrollView{ 24 return tableView 25 } 26 27 override func numberOfSections(in tableView: UITableView) -> Int { 28 return 1 29 } 30 31 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 32 return data.titleArray.count 33 } 34 35 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 36 37 let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "Cell") 38 cell.selectionStyle = .none 39 let profileImageURL = URL(string: data.imageURLStringArray[indexPath.row] as String)! 40 41 cell.imageView?.sd_setImage(with: profileImageURL, completed: { (image, error, _, _) in 42 43 if error == nil { 44 cell.setNeedsLayout() 45 } 46 }) 47 48 cell.textLabel?.text = data.titleArray[indexPath.row] 49 cell.textLabel?.adjustsFontSizeToFitWidth = true 50 cell.detailTextLabel?.adjustsFontSizeToFitWidth = true 51 cell.textLabel?.numberOfLines = 5 52 cell.detailTextLabel?.numberOfLines = 5 53 54 return cell 55 } 56 57 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 58 59 let webViewController = WebViewController() 60 let url = data.youtubeURLArray[indexPath.row] 61 UserDefaults.standard.set(url, forKey: "url") 62 present(webViewController, animated: true, completion: nil) 63 64 } 65 66 override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 67 return view.frame.size.height/5 68 } 69 70 override func viewWillDisappear(_ animated: Bool) { 71 super.viewWillDisappear(true) 72 73 data.titleArray.removeAll() 74 data.imageURLStringArray.removeAll() 75 data.youtubeURLArray.removeAll() 76 data.channelTitleArray.removeAll() 77 data.videoIdArray.removeAll() 78 } 79} 80
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。