๐ŸŒฑ SeSAC

[SeSAC] 220801 TIL

taeeekki 2022. 8. 10. 02:44

ํ”„๋กœํ† ์ฝœ๊ณผ String(describing: _)์‚ฌ์šฉํ•ด์„œ ๋ฆฌํ„ฐ๋Ÿดํ•œ ๊ฐ’ ๋œ์–ด๋‚ด๊ธฐ

๊ทธ ๋™์•ˆ identifier ๊ฐ’์„ ์“ฐ๋Š” ๊ณณ์ด ์ •๋ง ๋งŽ์•˜๋‹ค. ViewController์™€ TableViewCell, CollectionViewCell ๋“ฑ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. ๋งค ํด๋ž˜์Šค์—์„œ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด ๊ฐ’์„ ๋„ฃ๋Š” ๋Œ€์‹  ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜๋ฉด ๋ถˆํŽธํ•จ๊ณผ ๋ฐ˜๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

protocol Reusable: Anyobject {
    static var reuseidentifier: String { get }
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด extension์—์„œ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ฒŒ ๋˜๋ฉด, ์ด์ œ reuseidentifier๋ฅผ ํŽธํ•˜๊ฒŒ ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

extension UIViewController: ReusableViewProtocol {
    // ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ์˜ ํ˜•ํƒœ๋กœ ๋‚˜์˜ด.
    // ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ get๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด get ์ƒ๋žต ๊ฐ€๋Šฅ.
    static var reuseidentifier: String {
        return String(describing: self)
    }
}

extension UITableViewCell: ReusableViewProtocol {
    static var reuseidentifier: String {
        return String(describing: self)
    }
}

 


 

์ƒ์ˆ˜๊ฐ’ ๊ด€๋ฆฌํ•˜๊ธฐ

enum๊ณผ struct ์ด์šฉํ•˜๊ธฐ

  • struct : ์ธ์Šคํ„ด์Šค๋ฅผ ๋ˆ„๊ตฐ๊ฐ€ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ (๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฐจ์ง€, Rule break, ์ฝ”๋“œ ์ผ๊ด€์„ฑ ์ €ํ•˜ ๊ฐ€๋Šฅ, ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™” ๋ฐฉ์ง€๋„ ๊ฐ€๋Šฅ)
  • enum : ์ดˆ๊ธฐํ™” x, ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•ด์„œ namespace์˜ ์„ฑ๊ฒฉ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
enum StoryboardName: String {
    case main = "Main"
    case search = "Search"
    case setting = "Setting"
}

โžก๏ธ rawValue๋Š” ์ค‘๋ณต๋˜์–ด์„œ๋Š” ์•ˆ๋จ, 100% ์ผ€์ด์Šค๊ฐ€ ๊ณ ์œ ํ•œ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ผ๋ฉด case ์‚ฌ์šฉ x

 

 

struct StoryboardName {
    
    // ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™” ๋ฐฉ์ง€
    private init() {}
    
    static let main = "Main"
    static let search = "Search"
    static let setting = "Setting"
}
enum StoryboardName {
    static let main = "Main"
    static let search = "Search"
    static let setting = "Setting"
}

 


 

UserDefaultsHelper

  • ํƒ€์ž… ์ €์žฅ ํ”„๋กœํผํ‹ฐ + ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด
  • ์—ด๊ฑฐํ˜•์œผ๋กœ Key ๊ด€๋ฆฌ
  • ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ ์‚ฌ์šฉ
class UserDefaultsHelper {
    
    // shared or standard
    static let standard = UserDefaultsHelper()
    let userDefaults = UserDefaults.standard 
    // singleton pattern
    // ์ž๊ธฐ ์ž์‹ ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํƒ€์ž… ํ”„๋กœํผํ‹ฐ ํ˜•ํƒœ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
    
    private init() {}  // ๋ถˆํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐฉ์ง€
    
    enum Key: String {
        case nickname, age
    }
    
    var nickname: String {
        get {
            return userDefaults.string(forKey: Key.nickname.rawValue) ?? "๋Œ€์žฅ"
        }
        set { // ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ parameter
            userDefaults.set(newValue, forKey: Key.nickname.rawValue)
        }
    }
    
    var age: Int {
        get {
            // defaults๊ฐ€ 0์ด๋ผ nil์ด ์•„๋‹˜
            return userDefaults.integer(forKey: Key.age.rawValue)
        }
        set {
            userDefaults.set(newValue, forKey: Key.age.rawValue)
        }
    }
}

 


 

๋„คํŠธ์›Œํฌ ํ†ต์‹ 

  1. ์š”์ฒญ์ด ์žˆ์–ด์•ผ ์‘๋‹ต์„ ํ•œ๋‹ค.
  2. ์š”์ฒญ ์‹œ ๊ตฌ์ฒด์ ์ธ ์š”์ฒญ ๋ฐฉ์‹์ด ํ•„์š”ํ•˜๋‹ค.
  3. ์ธ์ฆํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค. (๋‹ฌ๋ผ๋Š”๋Œ€๋กœ ๋‹ค ์ฃผ์ง€ ์•Š๋Š”๋‹ค.)

๊ตฌ์„ฑ ์š”์†Œ

  • HTTP Methods
  • Status Code
  • JSON, XML
  • API (๊ทœ์น™)
  • ์ธ์ฆํ‚ค

API ํ…Œ์ŠคํŠธ ํˆด

  • Insomnia
  • Postman

Library

  1. Alamofire
  2. SwiftyJSON