alamofireobjectmapper requestObject 无法做出正确的请求和映射
alamofireobjectmapper requestObject cant make correct request and mapping
您好,我遇到了解析问题。
当我尝试在我的 tableviewcell 中解析 this JSON
并且得不到我需要的值
我的要求:
let videos = NewestVideos()
let URL = "https://api.vid.me/channel/1/new"
override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request(.GET, self.URL).responseObject { (response: Response<NewestVideos, NSError>) in
switch response.result {
case .Success(self.videos):
print("")
case .Failure(let error):
print("Request failed with error: \(error)")
}
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! NewTableViewCell
cell.newVideoNameLabel.text = resultr
return cell
}
如何在 tableviewcell 中获取值,并做出正确的请求?
我通过 ObjectMapper 的映射:
class Videos: Mappable {
var embedUrl: String?
var title: String?
required init?(_ map: Map){
}
func mapping(map: Map) {
embedUrl <- map["embed_url"]
title <- map["title"]
}
}
class NewestVideos: Mappable {
var videos: [Videos]? = []
required init?(_ map: Map){
}
func mapping(map: Map) {
videos <- map["videos"]
}
}
您的可映射 类 看起来不错,除了视频应该是视频。
class Video: Mappable {
var embedUrl: String?
var title: String?
required init?(_ map: Map) {}
func mapping(map: Map) {
embedUrl <- map["embed_url"]
title <- map["title"]
}
}
class NewestVideos: Mappable {
var videos: [Video]? = []
required init?(_ map: Map) {}
func mapping(map: Map) {
videos <- map["videos"]
}
}
接下来在您的控制器中,您对 switch 语句做了一些奇怪的事情。您应该让响应结果为 .Some
,然后将 self.videos
设置为 newest.videos
。
class ViewController: UIViewController, ... {
...
var videos = [Video]() {
didSet {
tableView.reloadData()
}
}
...
override func viewDidLoad() {
super.viewDidLoad()
let request = Alamofire.request(.GET, "https://api.vid.me/channel/1/new")
request.responseObject { (response: Response<NewestVideos, NSError>) in
switch response.result {
case .Success(let newest):
self.videos = newest.videos
case .Failure(let error):
print("Request failed with error: \(error)")
}
}
}
...
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! NewTableViewCell
let video = self.videos[indexPath.row]
cell.newVideoNameLabel.text = video.name
return cell
}
...
}
您好,我遇到了解析问题。
当我尝试在我的 tableviewcell 中解析 this JSON 并且得不到我需要的值
我的要求:
let videos = NewestVideos()
let URL = "https://api.vid.me/channel/1/new"
override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request(.GET, self.URL).responseObject { (response: Response<NewestVideos, NSError>) in
switch response.result {
case .Success(self.videos):
print("")
case .Failure(let error):
print("Request failed with error: \(error)")
}
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! NewTableViewCell
cell.newVideoNameLabel.text = resultr
return cell
}
如何在 tableviewcell 中获取值,并做出正确的请求?
我通过 ObjectMapper 的映射:
class Videos: Mappable {
var embedUrl: String?
var title: String?
required init?(_ map: Map){
}
func mapping(map: Map) {
embedUrl <- map["embed_url"]
title <- map["title"]
}
}
class NewestVideos: Mappable {
var videos: [Videos]? = []
required init?(_ map: Map){
}
func mapping(map: Map) {
videos <- map["videos"]
}
}
您的可映射 类 看起来不错,除了视频应该是视频。
class Video: Mappable {
var embedUrl: String?
var title: String?
required init?(_ map: Map) {}
func mapping(map: Map) {
embedUrl <- map["embed_url"]
title <- map["title"]
}
}
class NewestVideos: Mappable {
var videos: [Video]? = []
required init?(_ map: Map) {}
func mapping(map: Map) {
videos <- map["videos"]
}
}
接下来在您的控制器中,您对 switch 语句做了一些奇怪的事情。您应该让响应结果为 .Some
,然后将 self.videos
设置为 newest.videos
。
class ViewController: UIViewController, ... {
...
var videos = [Video]() {
didSet {
tableView.reloadData()
}
}
...
override func viewDidLoad() {
super.viewDidLoad()
let request = Alamofire.request(.GET, "https://api.vid.me/channel/1/new")
request.responseObject { (response: Response<NewestVideos, NSError>) in
switch response.result {
case .Success(let newest):
self.videos = newest.videos
case .Failure(let error):
print("Request failed with error: \(error)")
}
}
}
...
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! NewTableViewCell
let video = self.videos[indexPath.row]
cell.newVideoNameLabel.text = video.name
return cell
}
...
}