Swift 3:expression式隐式地从“UIView?”强制转换 去任何

其他人必须在将iOS项目转换为Swift 3时(或之后)接收到此消息,但是当我执行Googlesearch时,没有得到相关结果。

无论如何,转换到Swift 3后,我有大约30个警告说:

expression式隐式地从“UIView?”强制执行 去任何

但警告并不指向任何特定的代码行。 他们只引用警告存在的类。
有没有人有这个警告的洞察力,或者我怎么可以去沉默他们?

在我的情况下,这是一个没有显式types的字典相关的问题:

 let dict = ["key": value] 

比我解决指定types:

 let dict: [String: Any] = ["key": value] 

在你的情况下,你可以指定你的值types:

 let dict: [String: UIView] = ["key": value] 

当你正在调用的函数有一个Anytypes的参数,并且你正在传递一个可选参数时,会发生这种情况。

例如:

 let color: UIColor? = UIColor.red UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color], for: .normal) 

注意颜色UIColortypes的 并且setTitleTextAttributes需要一个types为[String:Any]的字典

为了避免这个警告,你必须强制解包你的可选项,或者将它投射到任何。

 UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color!], for: .normal) 

要么

 UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color as Any], for: .normal) 

看起来像Swift编译器中的错误:

https://bugs.swift.org/browse/SR-2921

目前,我看到这与Xcode 8.1和8.2testing版1。

在你的情况下,警告应该确定源文件,但不是行 – 如你所述。 你将不得不四处searchAny参数的函数调用。

好的新function是在即将到来的Swift工具链中出现的。

我相信这是固定在Xcode 8.3 beta 1(但尚未确认)