【问题标题】:Swift 2.0 and let warningsSwift 2.0 并发出警告
【发布时间】: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

标签: ios swift swift2 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

        【讨论】:

          猜你喜欢
          • 2015-11-18
          • 2023-03-28
          • 2012-05-03
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-09
          相关资源
          最近更新 更多