不止一次调用函数swift,返回相同的数据

时间:2015-07-23 14:45:13

标签: ios swift uipickerview

所以在swift中我调用了UI Picker中的一个函数

 func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        switch row{
        case 0:
            //switch out for returning the actual selected item from picker not using the picker array
            let poke = ("\(mooArray[0])")
            getPokemon(poke);
        case 1:
            let poke = ("\(mooArray[1])")
            getPokemon(poke);
        case 2:
            let poke = ("\(mooArray[2])")
            getPokemon(poke);
        default:
            println("stopping")
        }

        //self.view.backgroundColor = newBackColor;

    }

正如你所看到它调用getpokemon,通过口袋妖怪字符串,getpokemon函数在下面

func getPokemon(poke: String)
    {
        println("\(poke)");
        //var pokemon = "charizard"
        var url = "http://pokeapi.co/api/v1/pokemon/" + poke

        Alamofire.request(.GET, url)
            .responseJSON { (req, res, json, error) in
                if(error != nil) {
                    NSLog("Error: \(error)")
                    println(req)
                    println(res)
                }
                else {
                    //NSLog("Success: \(url)")
                    let json = JSON(json!)
                    //println("\(json)")
                    if let ability = json["abilities"][0]["name"].string
                    {
                        //println("The title is: \(ability)")
                    }
                    if let evolevels = json["evolutions"][0]["level"].number
                    {
                        //println("\(evolevels)")
                    }
                    if let attack = json["attack"].number
                    {
                        //println("\(attack)")
                        self.pokemon.append("\(attack)");
                    } else
                    {
                        println(json["attack"].error)
                    }
                    if let name = json["name"].string
                    {
                        //println("\(name)")
                        self.pokemon.append("\(name)");

                    }
                    println("\(self.pokemon[0])")
                    println("\(self.pokemon[1])")

                }
        }

    }

这使用了alamo fire和swifty json。它接受字符串,将其附加到API调用的url,并将我当前正在打印的数据返回到控制台。

当我第一次选择一行时,它正常工作,它会进行调用并从API返回正确的数据。

但是,如果我选择另一行,那么它会返回相同的数据吗?有什么理由为什么调用不会刷新我通过的新字符串?

1 个答案:

答案 0 :(得分:1)

这里只是一种可能性,但是如果你改变你的印刷品会发生什么:

println("\(self.pokemon[0])")
println("\(self.pokemon[1])")

要:

println("\(self.pokemon.last)")

我认为您正在获取新数据但未记录它,因为新条目已插入到数组的末尾,并且您正在记录第一个元素。