【问题标题】:Use AlamofireObjectMapper to create func return an object使用 AlamofireObjectMapper 创建 func 返回一个对象
【发布时间】: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 类中。

标签: swift alamofire func objectmapper


【解决方案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 吗?
猜你喜欢
  • 2015-03-03
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多