(Swift3) swift3 관점에서의 sqlite3 API 분석 – C-API 사용법 심화

Swift에서 sqlite3 사용하기에 대한 글을 몇 편 작성했었는데, 이 글에서는 C API를 사용하는데 있어서 관련되는 Swift 타입들과, 실제 C/C++ API가 어떤식으로 변환되어 Swift 영역으로 들어오는지에 대해 좀 더 자세하고 깊이 들여다보도록 하겠다. sqlite3_open 먼저 데이터베이스 파일을 열고 커넥션을 만드는 부분부터 시작하자. 모든 작업의 시작점이 될 sqlite3_open() 함수의 원형1은 다음과 같다. 파일경로를 받아서 연결을 생성한 후 연결 핸들러를 같이 전달받은 ppDB에 넣어준다. 이 때 ppDB의 타입은 sqlite3인데, 이는 C 구조체로되어 있다.2 int sqlite3_open( const char *filename, sqlite3 **ppDB ); //… typedef

Pointers in swift

C-API 사용하기 Objective-C와의 호환 기능 덕분에 Swift에서는 C 언어의 타입이나 기능들을 사용할 수 있게 되었다. 원시타입들 int, bool, short, char… 등의 C 원시타입은 CInt, CBool과 같이 접두어 C가 붙는 Swift 타입과 대응된다. 이는 라이브러리 임포트시에 자동으로 맵핑이 적용되게 된다. enum 타입 C의 enum 타입은 Swift의 enum 타입으로 변경된다. 특히 NS_ENUM 매크로를 통해 정의된 열거값들은, NS_ENUM 매크로의 첫번째 인자로 오는 타입이 연관타입이 되며 NS_ENUM 매크로로 정의되는 타입명이 생략된 이름을 변경된다. 예를 들어 typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefault, UITableViewCellStyleValue1, UITableViewCellStyleValue2, UITableViewCellStyleSubtitle };