使用 Swift 3 和 Alamofire 4 后没有得到响应
Posted
技术标签:
【中文标题】使用 Swift 3 和 Alamofire 4 后没有得到响应【英文标题】:Not getting response after using Swift 3 and Alamofire 4 【发布时间】:2016-11-17 08:14:09 【问题描述】:我在将代码更改为 swift 3 并使用 Alamofire 4 后遇到问题。 在使用 Alamofire 4 和 swift 3 之前,我的代码运行良好。当我更改为 swift 3 并使用 Alamofire 4 时,我遇到了很多错误,并且在将它们全部修复之后。 我还有一个问题是我没有得到任何回应!
我目前使用 Swift 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: Error Domain=kCFErrorDomainCFNetwork Code=303 "(null)" UserInfo=NSErrorPeerAddressKey=length = 28, capacity = 28, bytes = 0x1c1e01bb000000002607f8b040090809 ... 0000200a00000000, _kCFStreamErrorCodeErrorKey=-2201, _kCFStreamErrorKey=-2201, _k /p>
【问题讨论】:
有没有log
的信息?
请注意,您之前使用的是parameter encoding
,现在您使用的是encoding: JSONEncoding.default
您检查了吗?
@user3707644 ,谢谢您的提问。我有同样的问题。
【参考方案1】:
您已尝试使用编码:JSONEncoding.default。
编码方式应该是 URLEncoding.default
【讨论】:
Alamofire 4 中有一个名为ParameterEncoding.URL
的注释
请尝试使用 URLEncoding.default 而不是 JSONEncoding.default以上是关于使用 Swift 3 和 Alamofire 4 后没有得到响应的主要内容,如果未能解决你的问题,请参考以下文章
带参数的 Alamofire 4 Swift 3 GET 请求
Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析
如何在 Swift 3 中使用 Alamofire 4 解析这个 json?
使用 Alamofire 4 (Swift 3) 下载文件的路径
Swift 3.0 Alamofire 4.0 - Domain=NSURLErrorDomain Code=-999 “取消”