λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍎 iOS/Swift

[Swift] μ»¬λ ‰μ…˜ νƒ€μž…μ˜ ν”„λ‘œν† μ½œ - IteratorProtocol, Sequence, Collection

by Danna 2021. 6. 7.
728x90
728x90

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


 

728x90
728x90