Generic(μ λ€λ¦)
Genericμ μ€λ³΅μ νΌνλ©΄μ λ§€μ° μ μ°νκ³ μ¬μ¬μ© κ°λ₯ν ν¨μμ νμ μ μμ±ν μ μλλ‘ ν΄μ€λ€.
μ¬μ€ μ΄λ‘ μΌλ‘μ¨ Genericμ κ·Έλ κ² μ΄λ €μ΄ κ°λ
μ΄ μλλλ€. κΈ°λ³Έμ μΈ κ°λ
μ μμμ μΈκΈν λ΄μ©μ΄ λ€λΌκ³ μκ°νλλ°μ.
(λ¬Όλ‘ μ΄μΈμλ μ¬λ¬κ°μ§ μ€λͺ
μ λΆμ μ μκ² μ§λ§!)
μ λ€λ¦μ μ¬μ©νλ €κ³ ν λμλ μ λ€λ¦μ΄ νμν νμ λλ λ©μλ λ°λ‘ λ€μ κ΄νΈ(<>) μ¬μ΄μ placeholder(ex: T, V, U)λ₯Ό μ μ΄μ£Όμ΄ μ¬μ©ν©λλ€.
νμ λλ λ©μλ μ΄λ¦<νμ 맀κ°λ³μ(T)>
μ¬μ©λ²μ μ΄λ ΅μ§ μμ΅λλ€. λ¬Έμ λ λ΄ μμ μ΄ Genericμ μ¬μ©μ΄ νμν κ³³μμ μ μ ν μ¬μ©κ°λ₯νκ° μ΄κ²μ΄κ² μ£ .
Generic μ¬μ© μμ(1) - μλ² ν΅μ κ²°κ³Όλ₯Ό μ²λ¦¬νκΈ° μν Enum
// NetworkResult.swift
enum NetworkResult<T> {
case success(T)
case requestErr(T)
case pathErr
case severErr
case networkFail
}
μ κ° μ²μ(μλ°ν λ§νμλ©΄ μ²μμ μλμ§λ§)μΌλ‘ μ λ€λ¦μ μκ² λͺ¨λ₯΄κ² μ¬μ©νλ 건
μλ² ν΅μ κ²°κ³Όλ₯Ό κ° κ²½μ°μ λ°λΌ μ²λ¦¬νκΈ° μν Enumμ λ§λ€μλ λμΈλ°μ.
(μ΄ λλ Enumλ μ μ¬μ©ν΄μΌ νλμ§λ λͺ¨λ₯Έ μ± λ°λΌμΉκ³ μμλ€... λ¬Όλ‘ μ§κΈλ μνλ 건 μλμ§λ§...)
ππ» μ΄μ΄μ μ΄μΌκΈ°λ₯Ό ν΄λ³΄μ£ .
μλ²μμ ν΅μ μ λ§μΉκ³ λλ©΄ Response(μλ΅)μ΄ λμμ¬ν
λ°,
Responseμ κ²½μ° Success(μ±κ³΅) λλ Fail(μ€ν¨) λ μ€μ νλμΌν
λ°μ.
νΉνλ μλ² ν΅μ μ΄ μ±κ³΅μ μΌλ‘ λ§λ¬΄λ¦¬λλ©΄ μνλ λ°μ΄ν°λ₯Ό μ°λ¦¬λ λ°κ² λμ£ . μ΄κ²μ΄ .success(T)
μΌ λμ μ²λ¦¬μΌκ±°μμ.
κ·Έ λ°μ΄ν°λ₯Ό κ°μ§κ³ μ리쑰리 μ²λ¦¬λ₯Ό ν΄μ λ©μ§ κ²°κ³Όλ¬Όμ λ§λ€κ² μ£ ..?! β¨
μ±κ³΅νμ λ μ΄λ€ data
λ₯Ό λ΄μμ 보λ΄κ² λ ν
λ°, μ΄ λ Generic
μΌλ‘ νμ
μ λ§λ€μ΄λμΌλ©΄ μ΄λ€ κ°μ΄ λ€μ΄μλ νΈνκ² νμ²λ¦¬λ₯Ό ν μ μμ΅λλ€.
Generic μ¬μ© μμ(2) - μ²μμ μ°λ¦¬λ₯Ό μμ²λκ² κ΄΄λ‘νλ, Optional
enum Optional<T> {
case none // nil
case some(T) // optional value
}
μΈμμλ... Optional
λ Enum
μΌλ‘ ꡬνλμ΄ μκ³ , νμ
μ Generic
μ΄λΌλ...
noneμ μ무 κ°λ μ€μ λμ΄ μμ§ μμ κ²½μ°μΈ nilμ μλ―Έν ν
κ³ ,
someμ μ΄λ€ κ°μ κ°μ§κ³ μλ€λ κ²μ΄κ² μ£ ..? κ·Έλ¦¬κ³ Generic
μΌλ‘ νμ
μ λ§λ€μ΄ λμμΌλ κ·Έ κ°μ Int
, String
λ± μ΄λ€ νμ
μ΄λ κ°μ§ μ μμ΅λλ€.
μ²μ λ΄€μλλ κ½€λ μ μ ν 좩격μ΄μμ΅λλ€... μκ³ λμ 보λκΉ μ’ μ κΈ°νκ±°λ μ!
Generic μ¬μ© μμ(3) - TableViewCell Extensionsμμλ λ΄€λ κ² κ°μλ°...
// μ΅μ€ν
μ
μ μ© (μ ) - Dequeuing Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: “TableViewCell”, for: indexPath) as! TableViewCell
return cell
}
// μ΅μ€ν
μ
+ μ λ€λ¦μ μ΄μ©ν Dequeuing Cell
import UIKit
extension UITableView {
func cell<T: UITableViewCell>(cellForRowAt indexPath: IndexPath) -> T {
guard let cell = self.dequeueReusableCell(withIdentifier: “\(T.self)”, for: indexPath) as? T else {
fatalError("Could not find cell with reuseID \(T.self)")
}
return cell
}
}
// μ΅μ€ν
μ
μ μ© (ν) - Dequeuing Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.cell(for: TableViewCell.self)
return cell
}
λ€, μ½λλ₯Ό μ λΆ λ³Ό νμλ μꡬμ...
μ°λ¦¬λ 곡λΆλ₯Ό νλ€λ³΄λ©΄ μ’ λ μ¬μ΄ λ°©λ², νΈν λ°©λ²μ μ°Ύκ³ λ ν©λλ€.
TableViewλ CollectionViewλ₯Ό μ¬μ©νλ€λ³΄λ©΄ Cellμ Dequeueν΄μ μ¬μ©νλ κ²μ νμμΈλ°μ.
Cellμ μ’ λ νΈνκ² Dequeueνλ €κ³ Extensionμ μ¬μ©νλ κ²μ μ μ§ μκ² λ³Ό μκ° μμ΄μ!
κ·Έ λμ μ무μκ°μμ΄ μ¬μ©νλ€κ° λ€μ μ΄ν΄λ³΄λ <T: UITableViewCell>
μ΄ λ
μλ Genericμ μ¬μ©νλκ±°μμ..!!
κ·Όλ° μμμ μ΄ν΄λ΄€λ κ²μ΄λ μ‘°κΈ λ€λ₯Έ μ μ΄ μμ΄μ. μ½λ‘ (:)νκ³ νΉμ νμ
(UITableViewCell)μ΄ λͺ
μλμ΄μλ€μ?
νμ
μ μ½μ μμΌμ£Όκ³ μλ κ²μΈλ°μ. 'UITableViewCell νμ
μλ§ cell λ©μλλ₯Ό λμνλλ‘ νκ² λ€' μ λμ μλ―Έλ‘ μκ°νλ©΄ λ κ² κ°μμ.
κ·ΈλΌ μ’ λ μμ νκ² κΈ°λ₯μ μ¬μ©νλλ‘ ν μ μκ² μ£ !
λ§λ¬΄λ¦¬
κ·Έ λμ λ무 λΉμ°νκ² μκ°νκ³ μ¬μ©νκ³ μμλ Genericμ΄λΌλ μΉκ΅¬μ λν΄μ μμ보μλλ°μ.
μ¬μ€ λ무 μλ΅ν λΆλΆμ΄ λ§κΈ΄ νμ§λ§ μ¬μ€ κ°λ
μ μΈ λΆλΆμ λ€λ₯Έ λΈλ‘κ·Έλ μ±
μ λ무 μ λμμμ΄μ
λμ μ νμμ κΆκΈνμλ, κ·Έλ₯ λμ΄κ°λ λΆλΆκ³Ό μ°κ΄μ§μ΄ λͺ μ μ μ΄λ΄€μ΅λλ€.
λ μμΈν λ΄μ©μ κ²μμ ν΅ν΄ μ°Ύμ보면 μ’μ κ² κ°μ΅λλ€.
μ λ€λ¦μ ν λ§λλ‘ λ§νλ©΄ μλ κ² λ§ν μ μμκΉμ..?
Genericμ μΉ΄λ©λ μ¨ κ°μ λ μ! λꡬλ λ μ μλ€.
λ§μ§λ§ λ§μ μλλ‘ ν©μλ€ γ γ
'π iOS & Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS] μ΅μ λ, Optional (0) | 2021.08.18 |
---|---|
iOS Issue(1) - Build input file cannot be found (0) | 2021.07.30 |
[iOS] CollectionViewμ PageControlλ‘ Pager ꡬννκΈ° (9) | 2021.07.26 |
[iOS] λ°°μ΄μ κ³ μ°¨ ν¨μ - Higher Order Fuctions (0) | 2021.07.24 |
[Alamofire Mapper] URLRequestConvertible μ¬μ©ν΄λ³΄κΈ° (0) | 2021.07.23 |