Swift - 变量作为if语句的一部分更新,但之后又恢复

时间:2015-06-21 12:54:14

标签: swift

我正在构建一个浏览器然后关闭并从输入的URL获取来自各种API的一些数据。我已经完成了所有基本控件的运行,但我对某些代码的意图感到困惑,这些代码旨在附加一个' HTTP://'如果用户没有输入,请到URL的开头。

func loadAddressURL(URLpath: String) {


    //add 'http' if not entered.

    var first4 = Range(start: URLpath.startIndex,
        end: advance(URLpath.startIndex, 4))

   var URL = URLpath
    println(URL)

        if URLpath.substringWithRange(first4) != "http" {
        var URL = "http://" + URLpath
        println(URL)

    }

    println(URL)

    let requestURL = NSURL(string: URL)
    let request = NSURLRequest(URL: requestURL!)
    webview.loadRequest(request)
}

在第一次打印时,URL会在用户输入时进入。 If语句中的第二个print语句显示的值是添加了' HTTP://'正如预期的那样,但是在if语句完成之后,URL会回到用户输入的原始字符串,如果我能找出原因,我就会感到不安。有任何想法吗?

2 个答案:

答案 0 :(得分:0)

它与var

不一样
var URL = "http://" + URLpath

创建一个新的var。改为使用

URL = "http://" + URLpath

答案 1 :(得分:0)

问题在于可变范围。如果查看代码,可以在函数内部的顶层定义变量URL。然后比较前缀并附加http,然后在if语句中定义一个新变量(现在是作用域)。因此,外部的URL变量if不同于if中的变量,因此在if语句之外不会看到对URL的更改。

简单进行以下更改,应该没问题,

func loadAddressURL(URLpath: String) {


    //add 'http' if not entered.

    var first4 = Range(start: URLpath.startIndex,
        end: advance(URLpath.startIndex, 4))

    var URL = URLpath
    println(URL)

    if URLpath.substringWithRange(first4) != "http" {
      URL = "http://" + URLpath
      println(URL)
    }

    println(URL)

    let requestURL = NSURL(string: URL)
    let request = NSURLRequest(URL: requestURL!)
    webview.loadRequest(request)
}