Swift에서 프로토콜 버퍼 사용

6383 단어 Swiftprotobuf
며칠 전 애플Swift Protobuf Plugin이 공개됐다.Swift에서 프로토콜 버퍼를 사용하는 도구입니다.
나는 프로토콜 버퍼에 익숙하지 않아서 좋은 기회라고 생각해서 사용하기로 결정했다

원래 프로토콜 버퍼는?


프로토콜 버퍼는 구글이 개발한 대상 직렬 도구다.JSON처럼 장치 간에 데이터를 수발하는 데 사용할 수 있다.JSON과 달리 퓨즈가 필요 없고, 바이트열부터 정해진 순서대로 데이터를 채취하기 때문에 속도가 빠르고 데이터 양도 매우 적다.
데이터 용기 (protobuf에서 메시지라고 함) 규격을 나타내는 정의 파일 (.protoo) 을 미리 만들어서 메시지 클래스 접근 용기를 자동으로 생성합니다.데이터의 구조를 사전에 정의하기 위해 JSON에서 자주 발생하는 키 값이 바뀌어 데이터를 얻지 못하는 오류도 방지할 수 있다.
이번에는 그 반을 자동으로 생성하는 도구가 애플 공식 대응인 스위프트라고 해서 사용해 봤다.

가져오기


https://github.com/apple/swift-protobuf
본가의 README.따라가다

필요한 물건

  • Swift Package Manager의 최신 Swift3 컴파일러가 포함되어 있습니다.엑스코드를 최신으로 만들면 마음대로 들어갈 수 있을 것 같아
  • Google 프로토콜 버퍼용 컴파일러의 protoc.참조일가 개별 설치
  • 컴파일된 실행 파일은 https://github.com/google/protobuf/releases의protooc-3.1.0-sox-x8664.zip(Mac의 경우)부터 받을 수 있음
  • 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에 대한 설명은 설명하지 않습니다.
  • Cocoapeds의 경우(Cocoapedv1.1 이상 필요)
  • pod 'SwiftProtobuf', git: 'https://github.com/apple/swift-protobuf.git', :tag => '0.9.24'
    
  • Carrthage의 경우
  • 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 {
    
    }
    
    Output
    json: {"@type":"type.googleapis.com/BookInfo","id":"100","title":"aa","author":"ii"}
    id: 100  title: aa author: ii
    
    자꾸 움직이는 것 같은데.DataModel.pb.swiftData Fabric(이전 NSData Level)을 사용하여 파일을 작성하거나 가방에 넣고 자유롭게 처리할 수 있음

    끝말


    JSON보다 빠르고 데이터도 작으며 관건치가 일치하지 않아 바로 오류를 발견할 수 있으니 좋은 일입니다!
    주의해야 할 것은 애플의 Swift 프로토콜 버퍼 플러그인이 아직 개발 중이어서 파괴적인 변경이 있을 수 있다는 점이다.뭔가 이상하다면 정식 창고의 README를 먼저 보고 처음부터 시도해 보세요

    좋은 웹페이지 즐겨찾기