使用 AlamofireObjectMapper 创建 func 返回一个对象
Posted
技术标签:
【中文标题】使用 AlamofireObjectMapper 创建 func 返回一个对象【英文标题】:Use AlamofireObjectMapper to create func return an object 【发布时间】:2016-04-14 02:26:17 【问题描述】:我即将使用 AlamofireObjectMapper 扩展来映射来自服务器的 JSON 响应并创建一个函数来返回对象
我已经写了func
的这些代码
func downloadPokemonDetails1(completed: DownloadComplete)-> (Pokemon?)
let url = NSURL(string: _pokemonUrl)!
Alamofire.request(.GET, url).responseObject (response: Response<Pokemon, NSError>) in
guard response.result.isSuccess else
print(response.result.error.debugDescription)
return
let pokemon1 = response.result.value
return pokemon1
这是我的 Constanst.swift(包含 DownloadComplete
闭包)
import Foundation
let URL_BASE = "http://pokeapi.co"
let URL_POKEMON = "/api/v1/pokemon/"
typealias DownloadComplete = () -> ()
我不知道为什么 func downloadPokemonDetails1
给出错误 un-expected Non-void return value in void function
我的Pokemon
班级
lass Pokemon: Mappable
var id: String?
var name: String?
required init?(_ map: Map)
func mapping(map: Map)
name <- map["name"]
id <- map["id"]
【问题讨论】:
你能展示你的口袋妖怪课程吗? 您好,我已经编辑了包含 Pokemon 类的问题。 func downloadPokemonDetails1 也包含在 Pokemon 类中。 【参考方案1】:你的代码应该是这样的:
func downloadPokemonDetails1(completed: (Pokemon?) -> ())
let url = NSURL(string: _pokemonUrl)!
Alamofire.request(.GET, url).responseObject (response: Response<Pokemon, NSError>) in
guard response.result.isSuccess else
print(response.result.error.debugDescription)
return
let pokemon1 = response.result.value
completed(pokemon1)
self.downloadPokemonDetails1(
[weak weakSelf = self]
pokemon in
if let unwrappedPokemon = pokemon
weakSelf.label.text = unwrappedPokemon.name
else
//show some error
)
在您的代码中,您尝试从块中返回值,而不是从您的函数中。我认为更好的方法是使用块返回口袋妖怪对象。
希望对你有帮助
【讨论】:
您好,非常感谢您的建议。无论如何,为什么我们需要 2 func 从 URL 获取对象?获取到对象后如何更新 UI? 当然,你不需要 2 func 从 URL 获取对象。您可以从 alamofire 响应块更新您的用户界面 所以这是正确的,我可以从这里更新 UI //do stuff with object (例如 namelbl.text=unwrappedPokemon.name 我不知道您应用中的全部上下文,但可以从这里更新 UI。在某些情况下,您必须记住 make weak self 以避免保留循环。检查更新的代码 谢谢,如果 func downloadPokemonDetails1 来自 Pokemon 类,我们从视图控制器 viewDidload() 调用它。我们可以像 var pokemon: Pokemon 一样用 pokemon 替换 self 吗?以上是关于使用 AlamofireObjectMapper 创建 func 返回一个对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 AlamofireObjectMapper 映射模型 - swift
AlamofireObjectMapper,嵌套的 JSON 结构在序列化时总是 nil
在 AlamofireObjectMapper 响应中映射 allHeaderFields