52 lines
1.2 KiB
Swift
52 lines
1.2 KiB
Swift
//
|
|
// EmojiArtModel.swift
|
|
// EmojiArt
|
|
//
|
|
// Created by ching on 2023/2/19.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
struct EmojiArtModel: Codable {
|
|
var background: Background = EmojiArtModel.Background.blank
|
|
var emojis = [Emoji]()
|
|
|
|
struct Emoji: Identifiable, Hashable, Codable {
|
|
let text: String
|
|
var x: Int
|
|
var y: Int
|
|
var size: Int
|
|
var id: Int
|
|
|
|
fileprivate init(text: String, x: Int, y: Int, size: Int, id: Int) {
|
|
self.text = text
|
|
self.x = x
|
|
self.y = y
|
|
self.size = size
|
|
self.id = id
|
|
}
|
|
}
|
|
|
|
func json() throws -> Data {
|
|
return try JSONEncoder().encode(self)
|
|
}
|
|
|
|
|
|
init(json: Data) throws {
|
|
self = try JSONDecoder().decode(EmojiArtModel.self, from: json)
|
|
}
|
|
|
|
init(url: URL) throws {
|
|
let data = try Data(contentsOf: url)
|
|
self = try EmojiArtModel.init(json: data)
|
|
}
|
|
|
|
init() {}
|
|
|
|
private var uniqueEmojiId = 0
|
|
mutating func addEmoji(_ text: String, at location: (x: Int, y: Int), size: Int) {
|
|
uniqueEmojiId += 1
|
|
emojis.append(Emoji(text: text, x: location.x, y: location.y, size: size, id: uniqueEmojiId))
|
|
}
|
|
}
|