For-in loop and type casting only for objects which match type

前端 未结 2 823
予麋鹿
予麋鹿 2020-12-19 06:17

I have seen answers here which explain how to tell the compiler that an array is of a certain type in a loop.

However, does Swift give a way so that the loop only lo

相关标签:
2条回答
  • 2020-12-19 06:56

    You can use a for-loop with a case-pattern:

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

    This will execute the loop body only for those items in the array which are of the type (or can be cast to) YourType.

    Example (from Loop through subview to check for empty UITextField - Swift):

    for case let textField as UITextField in self.view.subviews {
        if textField.text == "" {
            // ...
        }
    }
    
    0 讨论(0)
  • 2020-12-19 06:58

    Given an array like this

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

    you can also use a combination of flatMap and forEach fo iterate through the Int values

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

    or

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

    In both cases you get the following output

    // 1
    // 4
    
    0 讨论(0)
提交回复
热议问题