Swiftでブロックリテラルを停止する方法はありますか?質問する

Swiftでブロックリテラルを停止する方法はありますか?質問する

以下のように、文字通りのものを止めたいのですbreak

var numbers = [1,2,3,4]
numbers.forEach {
    if $0 % 2 == 0 {
        break
    }
}

ベストアンサー1

forEachループではない(ループに渡されるブロックではあるが、ループそのものではない)、より正確にはforEachSwiftの制御フロー. そのため、 または は使用できませbreakcontinue

for-in ループを使用するだけです。


例 :

var numbers = [ 1,2,3,4]

func firstEvenNumber(inArray array: [Int]) -> Int? {

    var firstMatch : Int?

    for number in numbers {
        if (number % 2) == 0 {
            firstMatch = number
            break
        }
    }
    return firstMatch
}

firstEvenNumber(inArray: numbers) // 2

returnクロージャーの内側でも使用できますforEachが、壊すループは、それだけで戻り値現在のパス内のブロック。

var numbers = [ 1,2,3,4]

func evenNumbers(inArray: [Int]) -> [Int] {

    var matches : [Int] = []

    numbers.forEach{
        if $0 % 2 == 0 {
            matches.append($0)

            // early return on even numbers
            // does not stop forEach
            // comparable to a continue in a for in loop
            return
        }

        // only reached on uneven numbers
    }
    return matches
}

evenNumbers(numbers) // [2,4]

おすすめ記事