# 공부를 위해 정리하는 글이므로, 정확하지 않을 수 있습니다.

  • Codable이란?

    • A type that can convert itself into and out of an external representation."

      자신을 변환하거나 외부표현(external representation)으로 변환할 수 있는 타입

    • 즉, 특정 객체가 Codable 프로토콜을 채택하면, 해당 객체는 'json'과 같은 외부 타입으로 인코딩과 다시 json에서 객체로 디코딩이 가능하게 된다.

  • Codable 객체를 json으로 인코딩하기

    • 아래는 json으로 encoding한 예제이다. (Person객체 -> json)

      1. 인스턴스를 data 타입으로 인코딩

      2. data타입을 json 타입으로 변경

 func codableTest() {
        
        struct Person : Codable{
            var name : String?
            var age : Int
        }
        
        let encoder = JSONEncoder()
        let object = Person(name: "zeze", age: 7)
        let jsonData = try? encoder.encode(object)
        
        if let jsonData = jsonData, let jsonString = String(data: jsonData, encoding: .utf8){
            print(jsonString) //{"name":"Zedd","age":100}
        }

}

  

  •  
  • json을 인스턴스타입으로 파싱하기 ( jsonStr ➔ Data ➔ Object )

    • 받아온 json을 인스턴스로 파싱하는 것이 더 자주 사용되는 방식

    • 인코딩했던것과 반대방법으로

      1. json을 읽어 json String 값으로 저장

      2. json String 타입을 data타입으로 변경

      3. data타입인스턴스로 디코딩

func codableDecoding(jsonStr : String){

  	let decoder = JSONDecoder()
    var data = jsonStr.data(using: .utf8) // json형식을 Data타입으로 변경
    // data타입을 인스턴스 타입으로 변경
    if let data = data, let myPerson = try? decoder.decode(Person.self, from: data){
    	print(myPerson.name) //Zedd
      print(myPerson.age)
    }
}
  •  

 

 

※ json 파일을 json string으로 읽어오기

  1. 파일 경로 가져오기

  2. 파일경로로 json String 가져오기

let filePath = Bundle.main.path(forResource: "animals", ofType: "json")
let content = try! String(contentsOfFile: filePath!)

 

menuItemArray 에 데이터가 들어간 모습

 

# 공부를 위해 정리하는 글이므로, 정확하지 않을 수 있습니다.

 

처음 delegate의 개념을 접했을 때, 안드로이드의 calback 메서드와 어떤게 다른지 이해가 잘 되지 않았다.

 

'델리게이트는 단순하게 어느 누군가가 너에게 변화를 알릴때, 너 자신을 다른자신에게 넘기는 것을 말한다. 그래서 너는 그들에게 반응하게 된다. 예를 들어, 만약 ViewController가 네트워크 서비스에게 얘기할 때, 그리고 그 서비스가 어떤 요청을 끝냈을 때 알림받기를 원할 때 이것은 그것 자체로 네트워크 서비스의 델리게이트가 된다. 그리고 이것을 끝마쳤을 때 네트워크 서비스는 델리게이트를 호출할 것이다.'

 

'callback은 델리게이트 패턴과 기능면에서 유사하다. 이것은 어떤 일이 발생했을 때 다른 객체가 이를 알도록 하며, 데이터를 넘긴다는 것이 동일하다. 델리게이트 패턴이 자신의 참조를 넘기는 대신에, 콜백 메서드는 함수를 넘긴다는 것이다. 함수는 swift의 일등시민이므로 니가 함수 속성을 가질 어떤 이유도 없다.'

+ Recent posts