Swift:定义一个变量然后有条件地设置它?

标签 swift

这可能是一个非常简单的问题......

这里我有一些 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 语句的同一行上声明对象本身,而是使用 letif 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/

相关文章:

ios - Swift- 错误 : Variable 'self.___' used before being initialized

xcode - 删除 UserDefaults 中的持久数据后,如何重置我的应用程序

ios - 从 JSQMessagesController 中的 URL 字符串分配头像

ios - 重新安装应用程序后如何从 iCloud 中的文件获取数据?

arrays - Swift 如何按键值对数组字典进行排序

swift - macOS 窗口叠加效果错误?

operators - 无法为元组定义一元运算符

ios - (Swift) 尝试记录应用程序数据,但检查数据失败

ios - 加载 Paypal 验证码时 WKWebView 为空白

ios - Swift 4 - 对齐两列 UILabel View