无法更改if

时间:2015-04-24 22:35:40

标签: swift

我有一个小功能,"应该"改变了uilabel的文本,但我对如何从if语句中获取未包装的值感到兴奋。

func update() {
    var strAddress = "test"
    IP.getIpAddress { (data) -> Void in
        let json = JSON(data: data)
        if let address = json["ip"].string {
            println("address: \(address)")
            strAddress = (address)
        } else {
            println("not unwrapped")
        }
    }
    self.lblIpAddress.text = strAddress
}

json [" ip"]的结果正常,所以假设println显示"地址:xxx.xxx.xxx.xxx"。我的麻烦不是这样,它试图分配常数"地址"到变量strAddress。

我甚至试图将strAddress静态设置为" test"在if之内,但它仍然没有改变。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

声明

strAddress = (address)

尝试将单元素元组分配给strAddress。 (假设地址是一个字符串,它是(String)类型的元组。

去除括号,然后假设address的类型为String

,它应该工作

答案 1 :(得分:0)

您的IP.getIPAddress似乎异步调用闭包,这意味着它将在队列中的所有内容完成后执行。

所以在你的函数中,它在...... {/ p>之前到达self.lblIpAddress.text = strAddress

{ (data) -> Void in
    let json = JSON(data: data)
    if let address = json["ip"].string {
        println("address: \(address)")
        strAddress = (address)
    } else {
        println("not unwrapped")
    }
}

...已执行。

为了让你的工作像你想要的那样,你必须把self.lblIpAddress.text = strAddress放在那个闭包里。

IP.getIpAddress { (data) -> Void in
    let json = JSON(data: data)
    if let address = json["ip"].string {
        println("address: \(address)")
        strAddress = (address)
    } else {
        println("not unwrapped")
    }
    dispatch_async(dispatch_get_main_queue()) { // Make sure its called on the main thread
        self.lblIpAddress.text = strAddress
    }
}