當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Swift AnyIterator init(_:)用法及代碼示例

用法一

初始化器

init(_:)

創建一個包裝基迭代器但其類型僅取決於基迭代器的元素類型的迭代器。

聲明

init<I>(_ base: I) where Element == I.Element, I : IteratorProtocol

參數

base

type-erase 的迭代器。

詳述

您可以使用AnyIterator 來隱藏更複雜的迭代器的類型簽名。例如,以下示例中的 digits() 函數在集合上創建一個迭代器,該集合將 Range<Int> 實例的元素延遲映射到字符串。 digits() 函數不是返回具有封裝集合實現的類型的迭代器,而是首先將迭代器包裝在 AnyIterator 實例中。


func digits() -> AnyIterator<String> {
    let lazyStrings = (0..<10).lazy.map { String($0) }
    let iterator:
        LazyMapSequence<Range<Int>, String>.Iterator
        = lazyStrings.makeIterator()


    return AnyIterator(iterator)
}

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

用法二

初始化器

init(_:)

創建一個迭代器,將給定的閉包包裝在其next() 方法中。

聲明

init(_ body: @escaping () -> Element?)

參數

body

返回可選元素的閉包。每次在生成的迭代器上調用 next() 方法時都會執行 body

詳述

下麵的示例創建一個迭代器,它從整數 x 的初始值向上計數到 15:


var x = 7
let iterator: AnyIterator<Int> = AnyIterator {
    defer { x += 1 }
    return x < 15 ? x : nil
}
let a = Array(iterator)
// a == [7, 8, 9, 10, 11, 12, 13, 14]

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 AnyIterator init(_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。