2016-11-17 11 views
2

Alamofire 4とSwift 3を使用する前にコードを変更してAlamofire 4を使用して問題が発生しました。私がスイフト3に変更し、Alamofire 4を使用したとき、私は多くのエラーがあり、それらをすべて修正した後でした。 私はまだ1つの問題を抱えています。私は何の反応も得ていません!Swift 3とAlamofire 4を使用しても応答が得られません

罰金働いていたスウィフト3とAlamofire 4

import UIKit 
import Alamofire 

protocol VideoModelDelegate{ 
    func dataReady() 
} 


class VideoModel: NSObject { 

    let API_KEY = "xxxxxxxxxxxxxxxxx" 
    let UPLOADS_PLAYLIST_ID = "PLc4t1-K0nthvSUhYtc43BiG-Z9LK2mw5D" 


    var videoArray = [Video]() 

    var delegate: VideoModelDelegate? 

    let urladdress = "https://www.googleapis.com/youtube/v3/playlistItems" 


    func getFeedVideos() { 

     Alamofire.request("https://www.googleapis.com/youtube/v3/playlistItems", method: .get, parameters: ["part":"snippet", "playlistId": UPLOADS_PLAYLIST_ID,"key": API_KEY, "maxResults": "50"], encoding: JSONEncoding.default).responseJSON(completionHandler: { (response) -> Void in 

      print("##############################") 
      print(response) 
      print("##############################") 



      if let JSON = response.result.value as? [String: Any] { 

       print(JSON) 

       var arrayOfVideos = [Video]() 

       if let items = JSON["items"] as? [[String : Any]] { 

        for video in items { 
         print(JSON) 

         let videoObj = Video() 
         videoObj.videoId = (video as NSDictionary).value(forKeyPath:"snippet.resourceId.videoId") as! String 

         videoObj.videoTitle = (video as NSDictionary).value(forKeyPath:"snippet.title") as! String 

         videoObj.videoDescription = video["snippet.description"] as! String 

         if video[ "snippet.thumbnails.maxres.url"] != nil { 
          videoObj.videoThumbnailUrl = video["snippet.thumbnails.maxres.url"] as! String 
         } 
         else if video["snippet.thumbnails.hqdefault.url"] != nil{ 
          videoObj.videoThumbnailUrl = video["snippet.thumbnails.hqdefault.url"] as! String 

         } 
         else if video["snippet.thumbnails.sddefault.url"] != nil{ 
          videoObj.videoThumbnailUrl = video["snippet.thumbnails.sddefault.url"] as! String 

         } 
         else if video["snippet.thumbnails.mqdefault.url"] != nil{ 
          videoObj.videoThumbnailUrl = video["snippet.thumbnails.mqdefault.url"] as! String 

         } 

         else if video["snippet.thumbnails.default.url"] != nil{ 
          videoObj.videoThumbnailUrl = video["snippet.thumbnails.default.url"] as! String 

         } 
         else{ 

         } 



         arrayOfVideos.append(videoObj) 


         if self.delegate != nil { 
          self.delegate!.dataReady() 
         } 
        } 
       } 
       else{ 
        print("NOO") 
       } 
      } 

     }) 
    } 
} 

私の前のコードを使用して私の現在のコード:

import UIKit 
import Alamofire 

protocol VideoModelDelegate{ 
    func dataReady() 
} 


class VideoModel: NSObject { 

    let API_KEY = "xxxx" 
    let UPLOADS_PLAYLIST_ID = Video().playlistID 

    var videoArray = [Video]() 

    var delegate:VideoModelDelegate? 


    func getFeedVideos(){ 

     // Fetch the videos dynamically using YouTube Data API 
     Alamofire.request(.GET, "https://www.googleapis.com/youtube/v3/playlistItems", parameters: ["part":"snippet", "playlistId":UPLOADS_PLAYLIST_ID, "key":API_KEY, "maxResults":50], encoding: ParameterEncoding.URL, headers: nil).responseJSON { (response) in 

      if let JSON = response.result.value { 

       var arrayOfVideos = [Video]() 
       for video in JSON["items"] as! NSArray{ 
        //print(video) 

        // Create video objects off of the JSON response 
        let videoObj = Video() 
        videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as! String 
        videoObj.videoTitle = video.valueForKeyPath("snippet.title") as! String 
        videoObj.videoDescription = video.valueForKeyPath("snippet.description") as! String 


        if video.valueForKeyPath("snippet.thumbnails.maxres.url") != nil { 
         videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.maxres.url") as! String 
        } 
        else if video.valueForKeyPath("snippet.thumbnails.hqdefault.url") != nil{ 
         videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.hqdefault.url") as! String 

        } 
        else if video.valueForKeyPath("snippet.thumbnails.sddefault.url") != nil{ 
         videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.sddefault.url") as! String 

        } 
        else if video.valueForKeyPath("snippet.thumbnails.mqdefault.url") != nil{ 
         videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.mqdefault.url") as! String 

        } 
        else{ 
         videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.default.url") as! String 
        } 

        arrayOfVideos.append(videoObj) 

       } 

       // when all the video objects have been constructed, assign the array to the VideoModel property 
       self.videoArray = arrayOfVideos.reverse() 

       // Notify the delegate the data is ready 
       if self.delegate != nil{ 
        self.delegate!.dataReady() 
       } 
      } 
     } 

    } 

} 

私は応答を印刷しようとすると、この私は、ログに何を得ます:

FAILURE:エラードメイン= kCFErrorDomainCFNetworkコード= 303 "(ヌル)" のUserInfo = {NSErrorPeerAddressKey = {長さ= 28、容量= 28バイト= 0x1c1e01bb000000002607f8b040090809 ... 0000200a00 000000}、_kCFStreamErrorCodeKey = -2201、_kCFStreamErrorDomainKey = 4}

+0

「ログ」情報はありますか? – aircraft

+0

あなたは 'パラメータエンコーディング'を使用していましたが、今は 'encoding:JSONEncoding.default'を使用しています。 –

+1

@ user3707644、ご質問ありがとうございます。私は同じ問題を抱えていた。 –

答えて

5

エンコードで試したことがあります:JSONEncoding.default。

エンコード方法はURLEncoding.defaultにする必要があります。

+0

Alamofire 4に「ParameterEncoding.URL」という名前の通知があります。 –

+1

JSONEncoding.defaultの代わりにURLEncoding.defaultを試してみてください。 –

+0

は動作していますか? –

関連する問題