斯威夫特3:表达暗示强迫来自UIView?'任何

时间:2016-11-02 18:06:17

标签: ios xcode swift3

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

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

  

表达暗示强迫来自UIView?'任何

但警告并未指出任何特定的代码行。它们仅引用存在警告的类 有没有人能够深入了解这个警告,或者我如何对它们进行沉默?

4 个答案:

答案 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的实例并且一切正常。