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 中的聚合?
无法在Webview上加载PDF文件并发出警告void SendDelegateMessage(NSInvocation *)