【问题标题】:Unable to get Array Value in SWIFT无法在 SWIFT 中获取数组值
【发布时间】:2015-01-09 13:03:59
【问题描述】:

我从 parse 中检索了值,并一一存储在一个名为“sto_tit”的数组中。 但是,如果我尝试打印这些值,我将无法打印。它仅在循环内打印,但不会在 FOR LOOP 或 OUTSIDE ELSE 块之外打印,我不知道我的代码中有什么错误。请指导我!

下面是我的代码:

func parse_db()
{

    var sto_tit = [String]() // EITHER GLOBAL DECLARATION or INSIDE BLOCK, SAME ISSUE
    // FACING

    par_query.selectKeys(["story_title"])
    par_query.findObjectsInBackgroundWithBlock({(NSArray objects, NSError error) in

        if (error != nil) {
            NSLog("error " + error.localizedDescription)
        }
        else
        {

            self.results = NSArray(array: objects)
            //NSLog("results %@", results)

            for i in 0...self.results.count
            {


                self.par_object = self.results.objectAtIndex(i) as PFObject
                var sto = self.par_object["story_title"] as String
                sto_tit.append(sto)
                println("Check_1 \(sto_tit)") // PRINTING [A],[AB],[ABC] ...

            } //FOR ENDS
            println("HELLO") // GETS SKIPPED
            println("Check_2 \(sto_tit)") // GETS SKIPPED

        } // ELSE ENDS
        println("Check_3 \(sto_tit)") // GETS SKIPPED

    }) //PARSE ENDS

    println("Check_4 \(sto_tit)") //PRINTING "Check_4 []"

} // BLOCK ENDS

【问题讨论】:

  • 如果我正确理解了这个问题,您似乎在说“check2”没有被打印出来。这意味着你的 else 块中的整个代码都没有被执行。 if语句为真时的代码是什么?
  • 糟糕!根据我的情况, Else 块只能执行。因此, FOR LOOP 将被执行。因此,将打印“CHECK_1”。但是,一旦 FOR LOOP 结束,应该执行 CHECK_2,但该行会被跳过。不知道为什么?
  • sto_tit 是如何声明的?
  • 嗨!我已经在我的问题中更新了我的完整代码。指导我。
  • 我正在看你现在重新发布,但我也尝试将 sto_tit 设为实例变量(在任何函数之外,但在类中)。我用你自己得到了同样的预期结果。语法。

标签: if-statement swift nsarray


【解决方案1】:

我将其发布为答案,因为它有一些代码。我希望这对你有帮助,但如果没有,请告诉我。

我将以下代码粘贴到我的一个 Swift 应用程序中:

var sto_tit:[String] = ["Yes", "No", "Maybe"];
if(false)
{

}else{

    for var i:Int  = 0; i < 3; i++
    {
        var sto = "story_title"
        sto_tit.append(sto)
        println("Check_1 \(sto_tit)")
    }

    println("Check_2 \(sto_tit)")
}
println("Check_3 \(sto_tit)")

打印结果如预期:

Check_1 [是,不,也许,story_title]

Check_1 [是,否,也许,story_title,story_title]

Check_1 [是,否,也许,story_title,story_title,story_title]

Check_2 [是,否,也许,story_title,story_title,story_title]

Check_3 [是,否,也许,story_title,story_title,story_title]

请注意,我的代码中有些细节与你的不同,但这是我能尽快得出的最接近的。

还要注意 check_2 不会被跳过。我认为您的代码中有些内容并未按原样发布。

编辑:

这是一个有趣的异常,这段代码的行为符合预期:

var sto_tit:[String] = ["Yes", "No", "Maybe"];

println("sto_tit count = \(sto_tit.count)")

var j :Int = sto_tit.count

for var i:Int = 0; i < j; i++
{
    var sto = "story_title"
    sto_tit.append(sto)
    println("Check_1 \(sto_tit)")
}

但此代码将 for 循环发送到无限循环:

var sto_tit:[String] = ["Yes", "No", "Maybe"];

println("sto_tit count = \(sto_tit.count)")

for var i:Int = 0; i < sto_tit.count; i++
{
    var sto = "story_title"
    sto_tit.append(sto)
    println("Check_1 \(sto_tit)")
}

这是怎么回事?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多