LoginSignup
0
0

More than 3 years have passed since last update.

SwiftでMessagePackする

Last updated at Posted at 2019-08-13

環境

Xcode 10.3

使ったフレームワーク

  • MessagePack.swift
    • たくさんフレームワークがある中で、これが最もメンテナンスされていた。一番速いらしい
  • MessagePacker
    • Codable に対応しているフレームワーク

どちらもフレームワークのファイルが MessagePack.framework になっていてややこしい。。

導入

どちらもCocoaPodsで導入可能

target 'HogeApp' do
  use_frameworks!

  pod 'MessagePack.swift', '~> 3.0'
  pod 'MessagePacker'
end

その後 pod install で導入。

MessagePack.swift の使い方

本記事ではunpackする例のみを例示。
key value store 的なデータをunpackする場合。

import MessagePack

do {
    var configs: [String:String] = [:]
    let unpacked = try unpack(data)
    if let ary = unpacked.value.arrayValue {
        for map in ary {
            if let dics = map.dictionaryValue {
                if let k = dics["key"]?.stringValue, let v = dics["value"]?.stringValue {
                    configs[k] = v
                }
            }
        }
    }
} catch let error {
    print(error)
}

個別に値を割り当てていく必要があるのが難点。

MessagePacker の使い方

本記事ではunpackする例のみを例示。
適当なコンテンツをunpackしてみる。

Content.swift
struct Content: Codable {
    var title: String?
    var desc: String?
    var iconURL: URL?
    var isMain: Bool?

    enum CodingKeys: String, CodingKey {
        case title
        case desc
        case iconURL = "icon_url"
        case isMain = "is_main"
    }
}

型がある場合はとてもシンプルにデコードできる。

import MessagePacker

let content = try! MessagePackDecoder().decode(Content.self, from: data)

専用の型を作らないといけないのが難点。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0