IteratorProtocol
Iterator λ IteratorProtocol μ λΆν©νλ λ²μ© νμ μ΄λ€. IteratorProtocol μ λͺ©μ μ 컬λ μ μ λ°λ³΅ μννλ next() λ©μλλ₯Ό ν΅ν΄ 컬λ μ μ λ°λ³΅ μνλ₯Ό μΊ‘μν νλ κ²μ΄λ€.
IteratorProtocol μ μ μ
- Element :: λ°λ³΅ μννλ©° κ°μ Έμ¨ μμ
- associatedtype (μ°κ΄νμ )μΌλ‘ μ§μ ν¨μΌλ‘μ¨ μνν΄μ κ°μ Έμ¨ μμμ νμ μ μ§μ ν μ μλ€.
- next() λ©μλλ μνμ€μ μλ λ€μ μμλ₯Ό λ°ννκ±°λ, μνμ€μ λ§μ§λ§μΈ κ²½μ° nil μ λ°ννλ€.
public protocol IteratorProtocol {
associatedtype Element
public mutating func next() -> Self.Element?
}
곡μλ¬Έμ :: Apple Developer Documentation
Sequence
Sequence λ Sequence νλ‘ν μ½μ λΆν©νλ λ²μ© νμ μ΄λ€. Sequence νλ‘ν μ½μ λΆν©νλ νμ μ for...in μνλ¬ΈμΌλ‘ λ°λ³΅ μνν μ μλ€.
Sequence νλ‘ν μ½μ μ μ
- Iterator :: Iterator Protocol μ λΆν©ν΄μΌνλ€.
- makeIterator() λ©μλλ μ§μ νΈμΆν νμλ μμΌλ©°, μ€μννΈ λ°νμμ for...in μνλ¬Έμ μ¬μ©ν λ μλμΌλ‘ νΈμΆλλ€.
public protocol Sequence {
associatedtype Iterator: IteratorProtocol
public func makeIterator() -> Self.Iterator
}
for a in array {
// ν΄λΉ λ°λ³΅λ¬Έμ κ°λ₯νλλ‘ νλ νλ‘ν μ½μ΄ Sequence μ΄λ€!
}
곡μλ¬Έμ :: Apple Developer Documentation
Collection
Collection μ Collection νλ‘ν μ½μ λΆν©νλ λ²μ© νμ μ΄λ€. Collection νλ‘ν μ½μ Sequence νλ‘ν μ½κ³Ό Indexable νλ‘ν μ½μλ λΆν©νλ€. Collection μ μμλ₯Ό μ¬λ¬λ² μνν μ μμΌλ©°, νΉμ μΈλ±μ€μ μμλ₯Ό subscript λ‘ μ κ·Όν μ μλ Sequence μ λ»νλ€.
Collection νλ‘ν μ½μ λΆν©νλ νμ μ λ§λ€κΈ° μν΄ μ μν΄μΌνλκ²
- startIndex , endIndex property
- νΉμ μΈλ±μ€ μμΉμ μ½μ νκΈ° μν index(after:) λ©μλ
- νΉμ μΈλ±μ€ μμλ₯Ό μ κ·ΌνκΈ° μν μλΈμ€ν¬λ¦½νΈ (collection[1])
subscript(Self.Index) → Self.Element
곡μλ¬Έμ :: Apple Developer Documentation