자료들이 Codable
프로토콜을 따를 경우
Swift에서 복잡한 객체를 React Native으로 전달하기 위해서는 해당 객체를 JSON 형식으로 직렬화(serialize)해야 합니다. 이를 위해 Swift에서는
Codable
프로토콜을 사용하거나 직접 JSON 형식의 문자열을 생성할 수 있습니다.다음은 Swift에서
Codable
프로토콜을 사용하여 복잡한 객체를 JSON 문자열로 변환하는 예시입니다.import Foundation struct Person: Codable { var name: String var age: Int var address: Address } struct Address: Codable { var street: String var city: String var postalCode: String } let person = Person(name: "John Doe", age: 30, address: Address(street: "123 Main St", city: "Cityville", postalCode: "12345")) do { let jsonEncoder = JSONEncoder() let jsonData = try jsonEncoder.encode(person) if let jsonString = String(data: jsonData, encoding: .utf8) { print("JSON String: \(jsonString)") } } catch { print("Error encoding JSON: \(error)") }
위 코드에서
Person
과 Address
는 Codable
프로토콜을 따르고 있습니다. JSONEncoder
를 사용하여 객체를 JSON 데이터로 인코딩하고, 이를 문자열로 변환하여 출력합니다.이제 이 문자열을 React Native으로 전달하고, React Native에서는 해당 JSON 문자열을 파싱하여 JavaScript 객체로 사용할 수 있습니다. 기본적으로 React Native에서는 JSON 형식의 문자열을 다루는 데에
JSON.parse()
를 사용합니다.React Native 측에서 Swift에서 반환된 JSON 문자열을 다루는 예시:
import { NativeModules } from 'react-native'; const { MySwiftModule } = NativeModules; // Swift 모듈의 메서드를 호출하고 JSON 문자열을 받음 const jsonString = MySwiftModule.getComplexObjectAsJSON(); // JSON 문자열을 JavaScript 객체로 파싱 const jsonObject = JSON.parse(jsonString); // jsonObject를 사용하여 필요한 작업 수행 console.log(jsonObject);
예시

나 같은 경우는 에이슬립을 통해 측정된 수면 데이터 리포트 데이터를
swift
에서 RN
으로 올리길 원했다.해당 구조체가
Codable
프로토콜을 충족하고 있어서 jsonencoder
로 간단하게 JSON
으로 변환해서 보낼 수 있었다.Codable 프로토콜을 따르지 않을 경우, 직접 직렬화 하기
예, 만약 SDK에서 반환되는 결과물이
Codable
프로토콜을 따르지 않는다면, 직접 커스텀하게 JSON 데이터를 처리할 수 있습니다. 이를 위해 Swift에서는 JSONSerialization
을 사용하여 JSON 데이터를 다룰 수 있습니다.다음은
Codable
을 따르지 않는 객체를 JSON 문자열로 변환하는 예시입니다:swiftCopy code import Foundation struct CustomObject { var name: String var age: Int // ... 다른 속성들 } let customObject = CustomObject(name: "John Doe", age: 30 /*, ... 다른 속성들 */) do { let jsonObject: [String: Any] = [ "name": customObject.name, "age": customObject.age, // ... 다른 속성들 ] let jsonData = try JSONSerialization.data(withJSONObject: jsonObject, options: []) if let jsonString = String(data: jsonData, encoding: .utf8) { print("JSON String: \(jsonString)") } } catch { print("Error encoding JSON: \(error)") }
위 코드에서
CustomObject
는 Codable
프로토콜을 따르지 않습니다. 대신에 JSONSerialization
을 사용하여 CustomObject
의 속성들을 직접 JSON 데이터로 변환합니다. 변환된 JSON 데이터를 문자열로 변환하여 출력합니다.이제 이 JSON 문자열을 React Native으로 전달하고, React Native에서는 해당 JSON 문자열을 파싱하여 JavaScript 객체로 사용할 수 있습니다. 비록
Codable
을 사용하지 않지만, 직접 JSON 데이터를 생성하여 처리할 수 있게 됩니다.React Native 측에서 Swift에서 반환된 JSON 문자열을 다루는 예시:
import { NativeModules } from 'react-native'; const { MySwiftModule } = NativeModules; // Swift 모듈의 메서드를 호출하고 JSON 문자열을 받음 const jsonString = MySwiftModule.getComplexObjectAsJSON(); // JSON 문자열을 JavaScript 객체로 파싱 const jsonObject = JSON.parse(jsonString); // jsonObject를 사용하여 필요한 작업 수행 console.log(jsonObject);