这可能是一个非常简单的问题......
这里我有一些 Swift 代码:
var url: NSURL
if (someValue > 1) {
var fullUrl = self.baseUrl + "?id=" + (someValue as! String);
var url = NSURL(string: fullUrl);
}
else {
var url = NSURL(string: self.baseUrl);
}
let req = NSURLRequest(URL: url);
webView.loadRequest(req);
如您所见,我需要有条件地初始化 url
变量。然而,我在几乎所有其他强类型语言中使用的方法 - 初始化变量然后在 if 语句中分配给它 - 似乎不是 Swiftly 的实现方式。
上面的代码将拒绝编译并出现错误“variable 'url' used for being initialized”错误。 (当然,从这个程序流程可以看出,url
总是会被初始化,但 Swift 显然没有想当然。)
不在 if
block 之外定义变量会导致未知标识符错误 - 在 if
block 内定义的变量似乎仅在该 block 内定义。
除了定义一个空的 NSURL 对象之外,还有更好的方法吗?
实际上,我更愿意对此使用 let
,因为 NSURL 对象一旦创建就永远不会更改 - 并且 Swift 倾向于建议尽可能使用 let
。但是,在这种情况下您将如何使用 let
呢? (我试过了 - 发生了相同类型的错误。Swift 很不高兴我实际上没有在 let
语句的同一行上声明对象本身,而是使用 let
在 if
block 内导致范围问题。)
最佳答案
问题是您正在重新定义 url
作为var url = NSURL(string: self.baseUrl);
在 if-else
的范围内所以 url
outside 从未真正设置过。
这将修复错误并允许您使用 let
对于 url
.
let url: NSURL
if (someValue > 1) {
var fullUrl = self.baseUrl + "?id=" + (someValue as! String);
url = NSURL(string: fullUrl);
} else {
url = NSURL(string: self.baseUrl);
}
let req = NSURLRequest(URL: url);
webView.loadRequest(req);
关于Swift:定义一个变量然后有条件地设置它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31837571/