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(但尚未确认)