For-in循环和类型转换仅适用于匹配类型的对象

时间:2016-08-07 10:31:31

标签: swift casting for-in-loop

我见过答案here,它解释了如何告诉编译器数组在循环中是某种类型。

但是,Swift是否提供了一种方法,以便循环只循环数组中指定类型的项而不是崩溃或根本不执行循环?

2 个答案:

答案 0 :(得分:15)

您可以使用带有案例模式的for循环:

for case let item as YourType in array {
    // `item` has the type `YourType` here 
    // ...
}

这将仅针对那些项目执行循环体 数组类型(或可以转换为)YourType

示例(来自 Loop through subview to check for empty UITextField - Swift):

for case let textField as UITextField in self.view.subviews {
    if textField.text == "" {
        // ...
    }
}

答案 1 :(得分:0)

给出像这样的数组

let things: [Any] = [1, "Hello", true, "World", 4, false]

您还可以使用flatMapforEach的组合迭代Int

things
    .flatMap { $0 as? Int }
    .forEach { num in
        print(num)
}

for num in things.flatMap({ $0 as? Int }) {
    print(num)
}

在这两种情况下,您都会获得以下输出

// 1
// 4