我正在构建一个浏览器然后关闭并从输入的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会回到用户输入的原始字符串,如果我能找出原因,我就会感到不安。有任何想法吗?
答案 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)
}