iOS/🟠 Swift

[Swift] ν”„λ‘œν† μ½œ 총정리

woozzang 2021. 5. 22. 15:11

[ ν”„λ‘œν† μ½œ κ°œμš” ] - https://woozzang.tistory.com/44

μš”μ•½: ν”„λ‘œν† μ½œμ€ μš”κ΅¬μ‚¬ν•­μ΄λ©°, ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ ν˜•μ‹μ€ μš”κ΅¬μ‚¬ν•­μ„ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Όν•©λ‹ˆλ‹€.

 

[ 속성 μš”κ΅¬μ‚¬ν•­ ] - https://woozzang.tistory.com/45

μš”μ•½: ν”„λ‘œν† μ½œμ—μ„œ 속성은 κ°€λ³€μ„±κ³Ό 상관없이 λ°˜λ“œμ‹œ var ν‚€μ›Œλ“œλ§Œ 올 수 μžˆμŠ΅λ‹ˆλ‹€.

 

[ λ©”μ„œλ“œ μš”κ΅¬μ‚¬ν•­ ] - https://woozzang.tistory.com/48

μš”μ•½: λ©”μ„œλ“œ μš”κ΅¬μ‚¬ν•­μ˜ κ·œμΉ™μ€ 속성 μš”κ΅¬μ‚¬ν•­κ³Ό μœ μ‚¬ν•©λ‹ˆλ‹€.

 

[ μƒμ„±μž μš”κ΅¬μ‚¬ν•­ ] - https://woozzang.tistory.com/53

μš”μ•½: μƒμ„±μžλŠ” 클래슀의 경우 상속에 λŒ€λΉ„ν•΄ κ΅¬ν˜„μ‹œ `required` ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ•Ό ν•©λ‹ˆλ‹€.


 

[ μ„œλΈŒμŠ€ν¬λ¦½νŠΈ μš”κ΅¬μ‚¬ν•­ ]

protocol Something {
  subscript(_: Int) -> Int { get }
}

struct Some: Something {
  subscript(index: Int) -> Int {
    <#code#>
  }
}

get set μ‘°ν•©μœΌλ‘œ μ„ μ–Έ κ°€λŠ₯ν•˜λ©° μ„œλΈŒμŠ€ν¬λ¦½νŠΈμ˜ κ΅¬ν˜„λΆ€λŠ” 계산 μ†μ„±μ˜ κ·œμΉ™μ„ λ”°λ₯΄λ―€λ‘œ 쑰합에 따라 κ΅¬ν˜„ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ ν”„λ‘œν† μ½œμ—μ„œ get 으둜 μ„ μ–Έλœ 경우 get λ˜λŠ” get set 블둝 λͺ¨λ‘λ₯Ό κ΅¬ν˜„ν•΄μ€„ 수 μžˆλ‹€.

 

πŸ’‘parameter name 은 μΌμΉ˜μ‹œν‚€μ§€ μ•Šμ•„λ„ μš”κ΅¬μ‚¬ν•­μ— μΆ©μ‘±λ©λ‹ˆλ‹€.


 

[ νƒ€μž…μœΌλ‘œμ„œμ˜ ν”„λ‘œν† μ½œ ] - https://woozzang.tistory.com/54

μš”μ•½: ν”„λ‘œν† μ½œμ€ νƒ€μž…μœΌλ‘œ μ·¨κΈ‰λ˜λ©°, First Class Citizen μž…λ‹ˆλ‹€.

 

[ Delegation ] - https://woozzang.tistory.com/67

μš”μ•½: Delegate νŒ¨ν„΄μ€ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•©λ‹ˆλ‹€.

 

[ ν”„λ‘œν† μ½œ μ»΄ν¬μ§€μ…˜ ]

& (μ•°νΌμ„Όλ“œ) 문자λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μˆ˜μ˜ ν”„λ‘œν† μ½œμ„ 합쳐 ν•˜λ‚˜μ˜ μž„μ‹œ νƒ€μž…μœΌλ‘œ μ·¨κΈ‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ˜ν•œ ν”„λ‘œν† μ½œκ³Ό ν΄λž˜μŠ€λ„ ν•©μΉ  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

typealias Codable = Decodable & Encodable

예λ₯Ό λ“€μ–΄ Codable μ΄λΌλŠ” νƒ€μž…μ€ Decodable κ³Ό  Encodable ν”„λ‘œν† μ½œμ„ λͺ¨λ‘ μ±„μš©ν•œ νƒ€μž…μ„ κ°€λ¦¬ν‚€λŠ” typealias μž…λ‹ˆλ‹€.

 

λ‹Ήμ—°ν•˜μ§€λ§Œ ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ μΊμŠ€νŒ… 되면 Decodable κ³Ό Encodable 에 μ„ μ–Έλœ λ©€λ²„μ—λ§Œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.


 

 

[ Optional Requirements ] - Objective-C λŸ°νƒ€μž„ κ³Ό κ΄€λ ¨λœ λ¬Έλ²•μž…λ‹ˆλ‹€.

 

@objc (objc attribute) 와 optional (optional modifier) 을 μ΄μš©ν•˜μ—¬ ν”„λ‘œν† μ½œμ— μ„ μ–Έλœ 멀버λ₯Ό μ„ νƒμ μœΌλ‘œ κ΅¬ν˜„ν•˜κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

@objc λž€ μŠ€μœ„ν”„νŠΈλ‘œ μž‘μ„±ν•œ μ½”λ“œλ₯Ό Objective-C λŸ°νƒ€μž„μ—μ„œ ꡬ동 κ°€λŠ₯ν•˜κ²Œ ν•΄μ£ΌλŠ” μ½”λ“œμž…λ‹ˆλ‹€.

@objc protocol Something {
  @objc optional var test: Int {get set}
  
  @objc optional func some() -> Int
}

// μ—λŸ¬ μ•ˆλœΈ
class Some: Something {
  
}

μœ„μ˜ μ½”λ“œμ—μ„œ Something ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜μ˜€μ–΄λ„ test 속성은 μ„ νƒμ μœΌλ‘œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

λ§Œμ•½ κ΅¬ν˜„ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄, optional 멀버듀은 λͺ¨λ‘ μ˜΅μ…”λ„ νƒ€μž…μœΌλ‘œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ©°, 값은 nil 둜 μ΄ˆκΈ°ν™”λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.(❌ μ΄μ œλŠ” μ•ˆλ˜λŠ” λ“― )

μ΄λ ‡κ²Œ XCodeκ°€ μ œμ‹œλŠ” ν•΄μ£Όμ§€λ§Œ, μ‹€μ œλ‘œ μž…λ ₯ν•˜λ©΄ μ—λŸ¬κ°€ λœΉλ‹ˆλ‹€.

 

 

 

그리고 class ν˜•μ‹μ—μ„œλ§Œ 채택이 κ°€λŠ₯ν•©λ‹ˆλ‹€. ( @objc λ₯Ό μ‚¬μš©ν•˜λ©΄ AnyObject ν”„λ‘œν† μ½œμ„ μžλ™μœΌλ‘œ μƒμ†ν•©λ‹ˆλ‹€. )


 

[ ν”„λ‘œν† μ½œ ν™•μž₯ ]

 

ν”„λ‘œν† μ½œμ€ extension μ—μ„œ κΈ°λ³Έ κ΅¬ν˜„μ„ μΆ”κ°€ν•˜μ—¬ μ±„νƒν•œ νƒ€μž…μ—κ²Œ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

κΈ°λ³Έ κ΅¬ν˜„μ΄λž€, ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž…μ—μ„œ κ΅¬ν˜„μ„ μΆ”κ°€ν•˜μ§€ μ•Šμ„ μ‹œ 기본적으둜 μ œκ³΅λ˜λŠ” κ΅¬ν˜„μ„ κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

 

λ§Œμ•½ ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž…μ—μ„œ 직접 κ΅¬ν˜„μ„ ν–ˆλ‹€λ©΄, κΈ°λ³Έ κ΅¬ν˜„μ„ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

λͺ¨λ“  νƒ€μž…μ— κΈ°λ³Έ κ΅¬ν˜„μ„ μ œκ³΅ν•  μˆ˜λ„ 있고, extension 뒀에 where μ ˆμ„ ν†΅ν•΄μ„œ 쑰건을 μΆ”κ°€ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

extension Something where Self: Decodable {

  func print() {
  	...
  }
}

Something ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž… 쀑

Decodable ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž…μ—κ²Œλ§Œ  print  λ©”μ„œλ“œμ˜ κΈ°λ³Έ κ΅¬ν˜„μ„ μ œκ³΅ν•œλ‹€λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

 

 

 

끝!


πŸ€–πŸŸ’[우짱의 iOS λΈ”λ‘œκ·Έ]πŸ”΅πŸ’»

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