使用 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

AlamofireObjectmapper 编码模型属性

如何实例化映射类? (迅速 - alamofireObjectMapper)

AlamofireObjectMapper / ObjectMapper 是不是支持结构类型映射