Blog スタッフブログ

iOS Swift システム開発 ひとくちコードスニペット

[Swift]UIBezierPathをbase64エンコード・デコードするコードスニペット

Swift

こんにちは、株式会社MIXシステム開発担当のBloomです。

今回はSwiftでUIBezierPathを一旦base64文字列へエンコードし、またデコードするコードスニペットを掲載させていただきます。

extension UIBezierPath {
    func toBase64() throws -> String {
        let data = try NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: true)
        return data.base64EncodedString()
    }

    static func fromBase64(_ string: String) throws -> UIBezierPath {
        guard let data = Data(base64Encoded: string) else { throw NSError() }
        guard let path = try NSKeyedUnarchiver.unarchivedObject(ofClass: UIBezierPath.self, from: data) else {
            throw NSError()
        }
        return path
    }
}

使用例

    override func viewDidLoad() {
        super.viewDidLoad()
        let p = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 120, height: 60), cornerRadius: 8)
        do {
            let b64 = try p.toBase64()
            let r = try UIBezierPath.fromBase64(b64)

            let b1 = p.cgPath.boundingBoxOfPath
            let b2 = r.cgPath.boundingBoxOfPath
            print("bbox equal:", b1.equalTo(b2))
        } catch {
            print("error:", error.localizedDescription)
        }
        
    }

この使用例では一度作ったPathをエンコードし、またデコードしたPathと前後を比較して合致していることを確認しています。

これでUIBezierPathを簡単に保存できるようになりました。良かったですね。