我有这个for-in循环:
for button in view.subviews { }
现在,我希望将按钮强制转换为自定义类,以便可以使用其属性。
我尝试了这个: for button in view.subviews as AClass
for button in view.subviews as AClass
但是它不起作用,给我一个错误:'AClass' does not conform to protocol 'SequenceType'
'AClass' does not conform to protocol 'SequenceType'
我尝试了这个: for button:AClass in view.subviews
for button:AClass in view.subviews
但是,这也不起作用。
对于 Swift 2 和更高版本:
Swift 2 在 for 循环中添加了 大小写模式 ,这使得在 for 循环中进行类型转换更加容易和安全:
for case let button as AClass in view.subviews { // do something with button }
为什么这比您在 Swift 1.2 和更早版本中可以做的更好?因为 案例模式 允许您从集合中选择特定类型。它仅与您要查找的类型匹配,因此,如果数组包含混合,则只能对特定类型进行操作。
例如:
let array: [Any] = [1, 1.2, "Hello", true, [1, 2, 3], "World!"] for case let str as String in array { print(str) }
输出:
Hello World!
对于 Swift 1.2 :
在这种情况下,您正在转换view.subviews而不是button,因此您需要将其转换为所需类型的数组:
view.subviews
button
for button in view.subviews as! [AClass] { // do something with button }
注意:如果基础数组类型不是[AClass],则将崩溃。那就是!on as!告诉你的。如果不确定类型,可以使用条件转换as?和可选绑定if let:
[AClass]
!
as!
as?
if let
if let subviews = view.subviews as? [AClass] { // If we get here, then subviews is of type [AClass] for button in subviews { // do something with button } }
对于 Swift 1.1 和更早版本:
for button in view.subviews as [AClass] { // do something with button }
注意:如果子视图的类型不是全部,这也会崩溃AClass。上面列出的安全方法也适用于早期版本的Swift。
AClass