https://developer.apple.com/documentation/swift/enumeratedsequence
트리거가 된 코테 구문
let dic = friends.enumerated().reduce(into: [String: Int]()) { $0[$1.element] = $1.offset }
Swift 공식문서에서는 EnumeratedSequence를 다음과 같이 정의한다.
Sequece 또는 Collection의 Element 열거.
@frozen
struct EnumeratedSequence<Base> where Base : Sequence
EnumeratedSequence는 쌍 (n, x)의 시퀀스이며, 여기서 n은 0에서 시작하는 int 값이며 x들은 base sequence의 element입니다.
var s = ["foo", "bar"].enumerated()
for (n, x) in s {
print("\(n): \(x)")
}
// 0: foo
// 1: bar
EnumeratedSequence<Base>.Iterator where Base: Sequence
func next() -> Element?
- nil 반환하면 후속 element는 전부 nil
typealias Element = EnumeratedSequence<Base>.Iterator.Element = (offset: Int, element: Base.Element)
var s = ["foo", "bar"]
var t = s.enumerated()
var iter = t.makeIterator()
while let val = iter.next() {
print("\(val.element) \(val.offset)")
}
struct Lody: Sequence {
func makeIterator() -> some IteratorProtocol {
LodyIterator()
}
}
struct LodyIterator: IteratorProtocol {
typealias Element = Int
var current = 1
mutating func next() -> Element? {
if(current > 10) { return nil }
defer { current += 1 }
return current
}
}
// Lody2 타입 자체가 Iterator로 행동할 수 있게 해줌.
struct Lody2: Sequence, IteratorProtocol {
typealias Element = Int
var current = 1
mutating func next() -> Element? {
if(current > 10) { return nil }
defer { current += 1 }
return current
}
}
https://academy.realm.io/kr/posts/try-swift-soroush-khanlou-sequence-collection/
'iOS와 그 외 > Swift' 카테고리의 다른 글
[Swift] LazySequence (0) | 2024.07.08 |
---|---|
[Swift] 문자열 String (0) | 2024.07.07 |
[Swift] Attribute - @unknown / @frozen ( for 열거형 ) (0) | 2024.01.28 |
[Swift] 메타타입(Metatype) 이란? (0) | 2024.01.28 |
[Swift] Attribute - @discardableResult (0) | 2024.01.28 |