Swift에서 프로토콜 버퍼 사용
나는 프로토콜 버퍼에 익숙하지 않아서 좋은 기회라고 생각해서 사용하기로 결정했다
원래 프로토콜 버퍼는?
프로토콜 버퍼는 구글이 개발한 대상 직렬 도구다.JSON처럼 장치 간에 데이터를 수발하는 데 사용할 수 있다.JSON과 달리 퓨즈가 필요 없고, 바이트열부터 정해진 순서대로 데이터를 채취하기 때문에 속도가 빠르고 데이터 양도 매우 적다.
데이터 용기 (protobuf에서 메시지라고 함) 규격을 나타내는 정의 파일 (.protoo) 을 미리 만들어서 메시지 클래스 접근 용기를 자동으로 생성합니다.데이터의 구조를 사전에 정의하기 위해 JSON에서 자주 발생하는 키 값이 바뀌어 데이터를 얻지 못하는 오류도 방지할 수 있다.
이번에는 그 반을 자동으로 생성하는 도구가 애플 공식 대응인 스위프트라고 해서 사용해 봤다.
가져오기
https://github.com/apple/swift-protobuf
본가의 README.따라가다
필요한 물건
Swift 플러그인 설치
프로토콜 버퍼의 컴파일러 주체는protoc이지만, Swift 출력에 사용할 플러그인protoc-gen-swift를 준비해야 합니다
소스 떨어지다 세우다
$ git clone https://github.com/apple/swift-protobuf.git
$ cd swift-protobuf
$ swift build
실행 후.build/debug
내에 생성protoc-gen-swift
되었다.이 경로를 통해 터미널에서 실행할 수 있습니다.$ cp .build/debug/protoc-gen-swift ~/Documents
내가 재빨리 조사해 보니 적당한 곳으로 복사되었는데, 아마도 너무 적당한 것 같다.(/usr/local/bin 등 좋아하는 곳에 놓으세요. 프로토크와 함께 놓으면 될 것 같아요.).proto 파일 작성
README에 적힌 샘플을 보고 메시지를 만들어 보세요.
DataModel.proto
syntax = "proto3";
message BookInfo {
int64 id = 1;
string title = 2;
string author = 3;
}
message MyLibrary {
int64 id = 1;
string name = 2;
repeated BookInfo books = 3;
map<string,string> keys = 4;
}
.pb.swift 파일 생성!
Swift 내↑로 제작된 BookInfo와 MyLibrary 용기를 이용하여 Swift용 데이터 클래스를 자동으로 생성
$ protoc --swift_out=<出力先ディレクトリ> <入力ファイル>`
$ protoc --swift_out=. DataModel.proto
$ ls
DataModel.pb.swift DataModel.proto
와, 생성됐다echo $PATH
!자신의 Xcode 항목에 사용
여기서부터 Xcode 작업을 시작합니다.
먼저 방금 생성된 것이다.pb.swift 파일을 직접 넣기
.pb.swift 파일에서 Swift Protobuf 모듈을 사용하기 때문에 여기에도 설치됩니다.
창고는 위와 같다apple/swift-protobuf.일반 프레임을 사용할 때와 같이 가져오십시오.다음 예에서는 CocoPods 및 Carrthage에 대한 설명은 설명하지 않습니다.
pod 'SwiftProtobuf', git: 'https://github.com/apple/swift-protobuf.git', :tag => '0.9.24'
github "apple/swift-protobuf" "0.9.24"
이렇게 하면 자신의 프로젝트 내에서 probuf의 메시지를 사용할 수 있습니다!적당히 옮겨 보아라
do {
let hoge: BookInfo = BookInfo(id: 100, title: "aa", author: "ii")
let json: String = try hoge.serializeAnyJSON()
print("json: \(json)")
let data: Data = try hoge.serializeProtobuf()
let fuga: BookInfo = try BookInfo(protobuf: data)
print("id: \(fuga.id) title: \(fuga.title) author: \(fuga.author)")
} catch {
}
Outputjson: {"@type":"type.googleapis.com/BookInfo","id":"100","title":"aa","author":"ii"}
id: 100 title: aa author: ii
자꾸 움직이는 것 같은데.DataModel.pb.swift
Data Fabric(이전 NSData Level)을 사용하여 파일을 작성하거나 가방에 넣고 자유롭게 처리할 수 있음끝말
JSON보다 빠르고 데이터도 작으며 관건치가 일치하지 않아 바로 오류를 발견할 수 있으니 좋은 일입니다!
주의해야 할 것은 애플의 Swift 프로토콜 버퍼 플러그인이 아직 개발 중이어서 파괴적인 변경이 있을 수 있다는 점이다.뭔가 이상하다면 정식 창고의 README를 먼저 보고 처음부터 시도해 보세요
Reference
이 문제에 관하여(Swift에서 프로토콜 버퍼 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/iceman5499/items/0df8084e0a0f6f183636
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Swift에서 프로토콜 버퍼 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/iceman5499/items/0df8084e0a0f6f183636텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)