提问人:RyJ 提问时间:11/3/2016 最后编辑:eli-kRyJ 更新时间:3/31/2019 访问量:19001
Swift 3:表达式从“UIView?”隐式强制转换为Any
Swift 3: Expression implicitly coerced from 'UIView?' to Any
问:
其他人在将 iOS 项目转换为 Swift 3 时(或之后)一定收到了此消息,但当我进行 Google 搜索时,我没有得到任何相关结果。
无论如何,在转换为 Swift 3 后,我有大约 30 个警告说:
表达式从“UIView?”隐式强制转换为“任何”
但警告并不指向任何特定的代码行。它们仅引用存在警告的类。
有没有人知道这个警告,或者我该如何让它们沉默?
答:
15赞
Daniel
11/3/2016
#1
看起来像 Swift 编译器中的错误:
https://bugs.swift.org/browse/SR-2921
目前,我在 Xcode 8.1 和 8.2 beta 1 中看到了这一点。
在您的情况下,警告应标识源文件,而不是行 - 如您所述。您将不得不四处寻找对带有参数的函数的调用。Any
好消息是,它似乎在即将到来的 Swift 工具链中得到了修复。
我相信这在 Xcode 8.3 beta 1 中已修复(但尚未确认)
33赞
Michael Peterson
11/7/2016
#2
当您调用的函数具有 Any 类型的参数并且您传递可选参数时,将发生这种情况。
例如:
let color: UIColor? = UIColor.red
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color], for: .normal)
请注意,color 的类型为 UIColor?,而 setTitleTextAttributes 需要 [String: Any]?类型的字典。
为了避免警告,您必须强制解开 optional,或将其转换为 Any。
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color!], for: .normal)
或
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color as Any], for: .normal)
评论
2赞
n13
11/29/2016
对我来说就是这样。我有一个 [String: Any] 类型的字典,并使用了 dict = [ “foo” : bar ] 的赋值,其中 bar 的类型为 String?(可选)。通过用 dict = [ “foo” : bar ??“” ] - 这样,如果 bar 为 nil,则该值将设置为空字符串,这是我在这种情况下想要的。
35赞
2 revs, 2 users 78%Madson Cardoso
#3
就我而言,这是一个与没有显式类型的字典相关的问题:
let dict = ["key": value]
比我解决了指定类型的问题:
let dict: [String: Any] = ["key": value]
在您的情况下,您可以指定值类型:
let dict: [String: UIView] = ["key": value]
评论
1赞
RyJ
11/23/2016
这绝对是我收到警告的原因。对我来说,它是将显式类型添加到我们用于自动布局的视图字典中。 几周前,我在代码中添加了该内容,但没有意识到它已经清除了这些警告。谢谢伙计!let views: [String: UIView] = ["button": button]
1赞
DawnSong
1/4/2017
Any
与 不同,即 ,因此您必须确保 value 是某种非 null 类型。Optional(Any)
Any?
1赞
user1046037
3/31/2019
#4
问题
预期的类型是,但提供的类型是Any
UIView?
问题出在可选的,只需确保传递了一个实例,事情就会起作用。UIView
评论
print
UIView?