iOS/🟠 Swift

[Swift] CaseIterable μ΄λž€?

woozzang 2021. 3. 29. 02:47
πŸ€–πŸŸ’[우짱의 iOS λΈ”λ‘œκ·Έ]πŸ”΅πŸ’»

iOSλ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ 배운 λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

μ•ˆλ…•ν•˜μ„Έμš”. μ˜€λŠ˜μ€ CaseIterable ν”„λ‘œν† μ½œμ— λŒ€ν•΄ μ •λ¦¬ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€ 🐢

 

CaseIterable μ€ 'Case' λΌλŠ” ν‚€μ›Œλ“œμ—μ„œ μœ μΆ”ν• μˆ˜ μžˆμ§€λ§Œ μ—΄κ±°ν˜•κ³Ό κ΄€λ ¨λœ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.

 

μ»΄νŒŒμΌλŸ¬κ°€ ν”„λ‘œν† μ½œ κ΅¬ν˜„μ„ μžλ™μœΌλ‘œ μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— 채택 μ„ μ–Έλ§Œ ν•΄μ£Όλ©΄ λ°”λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Όλ‘  λͺ¨λ“  μ—΄κ±°ν˜•μ— λŒ€ν•΄ μ œκ³΅ν•˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. κ·Έ λ‚΄μš©μ€ μ•„λž˜μ—μ„œ λ‹€λ£¨κ² μŠ΅λ‹ˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ CaseIterable 을 μ„ μ–Έν•˜λ©΄ μ–΄λ–€ 것을 μ–»κ²Œ λ˜λŠλƒ....?

 

λ°”λ‘œ allCases λΌλŠ” νƒ€μž… μ†μ„±μž…λ‹ˆλ‹€.

 

 

λͺ¨λ“  κ΅¬ν˜„μ„ λ³Ό μˆ˜λŠ” μ—†μ§€λ§Œ, ν”„λ‘œν† μ½œ μ„ μ–ΈλΆ€λ‘œ 이동해보면 μœ„μ™€ 같이 볼수 μžˆλŠ”λ°...

 

allCases λŠ” Self.AllCases νƒ€μž…μž…λ‹ˆλ‹€.

 

λ‹€μ‹œ μœ„μ˜ AllCases νƒ€μž… μ•žμ—  associatedtype λΌλŠ” ν‚€μ›Œλ“œκ°€ λˆˆμ— λ•λ‹ˆλ‹€.

 

이것은 ν”„λ‘œν† μ½œμ—μ„œ νŠΉμ •λ˜μ§€ μ•Šμ€ νƒ€μž…μ„ ν‘œν˜„ν•˜κ³ μ‹Άμ„λ•Œ μ‚¬μš©ν•˜λŠ” λ¬Έλ²•μž…λ‹ˆλ‹€.

κ΄€λ ¨ κΈ€: associatedtype (μž‘μ„±μ˜ˆμ •)

 

AllCases λŠ” Self == Self.AllCases.Element 쑰건을 λ§Œμ‘±ν•˜λŠ” μš”μ†Œλ‘œ 이루어진 Collection ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž…μ΄λ„€μš”!

 

μœ„ 쑰건은 μ»¬λ ‰μ…˜ μš”μ†Œκ°€ Self νƒ€μž…μœΌλ‘œ 이루어져 μžˆμ–΄μ•Όν•¨μ„ 이야기 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

μ •λ¦¬ν•˜λ©΄ AllCases νƒ€μž…μ€, μ—΄κ±°ν˜• νƒ€μž… μžμ‹ μ„ νƒ€μž…μœΌλ‘œ κ°€μ§€λŠ” μš”μ†Œλ“€μ„ 가지고 μžˆλŠ” μ»¬λ ‰μ…˜μ„ λ‚˜νƒ€λ‚΄λŠ” νƒ€μž…μž…λ‹ˆλ‹€!

 

즉 νƒ€μž… 속성 allCases μ˜ νƒ€μž…μ€ [ Self ] 정도가 λ˜κ² λ„€μš”!

 

μ•„λž˜ μ½”λ“œμ—μ„œ 직접 ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.πŸ‘‡πŸ»πŸ‘‡πŸ»πŸ‘‡πŸ»


 

예제 μ½”λ“œ

enum Direction: CaseIterable {
    case north, south, east, west
}

for val in Direction.allCases {
    print(val)
}

// "north south east west" κ°œν–‰κ³Ό λ„μ–΄μ“°κΈ°λŠ” μ μ ˆν•˜κ²Œ μƒκ°ν•΄μ£Όμ„Έμš”!

 

νƒ€μž… 속성 allCases 의 νƒ€μž…μ„ 확인해보면 [Direction] νƒ€μž…μ΄κ³ , 읽기 μ „μš© μ†μ„±μž„μ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μš”μ†Œμ˜ μˆœμ„œλŠ” case μ„ μ–Έμˆœμ„œμ™€ λ™μΌν•˜λ©°, Collection ν”„λ‘œν† μ½œμ˜ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예) Direcrion.allCases.randomElement()

 


 

쑰건

μœ„μ—μ„œ λͺ¨λ“  μ—΄κ±°ν˜•μ— λŒ€ν•΄μ„œ μžλ™ κ΅¬ν˜„λ˜μ§€λŠ” μ•ŠλŠ”λ‹€κ³  ν–ˆλŠ”λ°, κ·Όκ±°λŠ” μ•„λž˜ 사진과 κ°™μŠ΅λ‹ˆλ‹€.

 

 

μ •λ¦¬ν•˜μžλ©΄ μ—°κ΄€ 값을 가지지 μ•Šκ±°λ‚˜, @available 속성을 가진 caseκ°€ μ—†λŠ” μ—΄κ±°ν˜•μ΄μ–΄μ•Όλ§Œ CaseIterable μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ πŸ˜‰

 

 

 

끝!