当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


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(_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。