2 // DeckBuilderStructure.swift
5 // Created by Hori,Masaki on 2017/07/14.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 protocol DeckBuilderDescriptable {
13 var deckDescription: String { get }
16 struct DeckBuilderStructure {
44 extension DeckBuilderStructure: DeckBuilderDescriptable {
46 var deckDescription: String {
48 let verStr = "\"version\":\(version)"
49 let fleetStr = zip(1...4, fleets)
50 .map { "\"f\($0.0)\":{\($0.1.deckDescription)}" }
51 .joined(separator: ",")
52 let hqLvStr = hqLv.map { "\"hqlv\":\($0)" }
54 let join = [verStr, fleetStr, hqLvStr]
56 .joined(separator: ",")
62 extension DBFleet: DeckBuilderDescriptable {
64 var deckDescription: String {
66 return zip(1...6, ships)
67 .map { "\"s\($0.0)\":{\($0.1.deckDescription)}" }
68 .joined(separator: ",")
72 extension DBShip: DeckBuilderDescriptable {
74 var deckDescription: String {
76 return "\"id\":\"\(id)\",\"lv\":\(lv),\"luck\":\(luck),\"items\":{\(fullItemDesc)}"
79 private var fullItemDesc: String {
81 switch (items, exDesc) {
82 case let (items, ex?) where items.isEmpty: return ex
83 case let (_, ex?): return "\(itemsDesc),\(ex)"
84 default: return itemsDesc
88 private var itemsDesc: String {
90 return zip(1...4, items)
91 .map { "\"i\($0.0)\":{\($0.1.deckDescription)}" }
92 .joined(separator: ",")
95 private var exDesc: String? {
97 return exItem.map { "\"ix\":{\($0.deckDescription)}" }
101 extension DBItem: DeckBuilderDescriptable {
103 var deckDescription: String {
106 case let (lv?, aLv?): return "\"id\":\(id),\"rf\":\(lv),\"mas\":\(aLv)"
107 case let (lv?, _): return "\"id\":\(id),\"rf\":\(lv)"
108 case let (_, aLv?): return "\"id\":\(id),\"mas\":\(aLv)"
109 default: return "\"id\":\(id)"