Swift 2.0 并发出警告

Posted

技术标签:

【中文标题】Swift 2.0 并发出警告【英文标题】:Swift 2.0 and let warnings 【发布时间】:2016-02-25 07:58:58 【问题描述】:

我在 swift 2.0 中遇到问题

这是我当前编写的代码块:

let URL = NSURL(string:"www.google.com")

然后我收到以下警告:“从未使用过不可变值 URL 的初始化,请考虑将其替换为分配给 '_' 或将其删除。

当我想声明一个let时我应该怎么做。

我在写时收到了类似的警告

在 swift 2.0 中我可以做什么来声明一个 Let 或一个 var?

【问题讨论】:

我认为您没有在代码中的任何地方使用该 URL 对象,这就是为什么迅速抛出该警告的原因。实际上,我没有看到带有 URL 对象的警告,而是看到了数据对象的警告! (来自截图) 如果你没有使用变量data,不要声明它。 您没有使用data,因为您声明了它,但随后它被重新声明为回调中的参数,这就是您实际使用的。 这是我当前的代码: let URL = NSURL(string: "www.amazon.com") let data = NSURLSession.sharedSession().dataTaskWithURL(URL!) (data, response, if (error == nil) let urlContent = NSString(data: data!, encoding: NSUTF8StringEncoding) print(urlContent) 中的错误),即使我将 var 替换为 let 【参考方案1】:

initialization of immutable value URL was never used

意味着您没有在任何地方使用该变量,因此它会引发警告。但是查看屏幕截图,您已将URL 声明为var 并在data 中使用它,这是另一个变量。

所以现在应该有两个警告。 URL 被声明为 var,但从未发生变异,并且从未使用过 data 变量。

为了满足,请使用let URL ...,因为您没有对其进行变异。并取消data,因为这是一个异步块/闭包,您可以从完成块访问data

注意:

以后不修改对象时应使用let,而要修改对象时应使用var。考虑数组:

let immutableArray:[String] = ["foo", "bar"]
var mutableArray:[String] = ["hello"]

mutableArray.append("World") // Is valid since its a var
immutableArray.append("abc") // Not valid, infact auto complete does not even show append methods

【讨论】:

【参考方案2】:

每当您声明 let 并且不使用该常量编译器时,都会显示警告。没有什么可担心的。如果您不使用let 常量,请将其替换为_。是为了优化。如果你不使用删除那个让。或者使用简单的print(YOUR Constant) 使警告静音 对于您的案例用户

let url = URL = NSURL(string:"www.google.com")

let data = NSURLSession.sharedSession().downloadTaskWithURL(URL!) 
 (data, response, error) in 
  if(error != nil) 
  print(data) // This data is different from let data constant

print(data) // This will silence warning. Also make sure it is not nil

【讨论】:

【参考方案3】:

这可能工作正常。

let URL = NSURL(string:"www.google.com")
NSURLSession.sharedSession().downloadTaskWithURL(URL!)  (url: NSURL?, response: NSURLResponse?, error: NSError?) -> Void in
    if error == nil && url != nil 
        let data = NSData(contentsOfURL: url!)
            print(data)
        
    

【讨论】:

【参考方案4】:

您应该将 var 更改为 let 以解决此警告。 为了节省内存,当您只需要从变量中获取值而不需要设置时,编译器建议用户使用let 而不是var

【讨论】:

以上是关于Swift 2.0 并发出警告的主要内容,如果未能解决你的问题,请参考以下文章

Swift4 - WkwebView 警告无法向服务 com.apple.WebKit 发出信号

如何在滚动窗口上“检查”(警告)InfluxDB 2.0 中的聚合?

如何在 Gitlab 中完成工作并发出警告

无法在Webview上加载PDF文件并发出警告void SendDelegateMessage(NSInvocation *)

Swift iOS:无声推送,触发应用程序发出声音和振动?

编译器选项在 -Wall -Werror 之后发出错误警告