其他人必须在将iOS项目转换为Swift 3时(或之后)收到此消息,但是当我进行Google搜索时,我没有得到相关结果。
无论如何,在转换为Swift 3之后,我有大约30个警告说:
表达暗示强迫来自UIView?'任何
但警告并未指出任何特定的代码行。它们仅引用存在警告的类 有没有人能够深入了解这个警告,或者我如何对它们进行沉默?
答案 0 :(得分:35)
在我的情况下,这是一个与没有明确类型的字典相关的问题:
let dict = ["key": value]
比我解决了指定类型:
let dict: [String: Any] = ["key": value]
在您的情况下,您可以指定您的值类型:
let dict: [String: UIView] = ["key": value]
答案 1 :(得分:27)
如果您调用的函数的参数类型为任意,并且您传递可选,则会发生这种情况。
例如:
let color: UIColor? = UIColor.red
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color], for: .normal)
请注意, color 的类型为 UIColor?, setTitleTextAttributes 需要 [String:Any]?<的字典? /强>
为了避免警告,您必须强制打开可选项,或将其强制转换为Any。
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color!], for: .normal)
或
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color as Any], for: .normal)
答案 2 :(得分:15)
看起来像是Swift编译器中的一个错误:
https://bugs.swift.org/browse/SR-2921
目前,我在Xcode 8.1和8.2 beta 1中看到了这一点。
在您的情况下,警告应该标识源文件,而不是行 - 如您所述。您将不得不四处寻找具有Any
参数的函数的调用。
好新的是它在即将到来的Swift工具链中看起来已经修复了。
我相信这已在Xcode 8.3 beta 1中修复(但尚未确认)
答案 3 :(得分:0)
期望的类型为Any
,但提供的类型为UIView?
问题出在可选上,只需确保已传递UIView
的实例并且一切正常。