SwiftUIの基本を身につけたい方はこちら

【SwiftUI】@AppStorageでColorを保存しようとするとエラーになる件の解決方法

事象

@AppStorageで、Colorを保存しようとしたが、以下のエラーが表示された。

No exact matches in call to initializer

解決方法

Color+Extensionsというファイルを作成し(名前は任意)、以下のコードを貼りつける。

import SwiftUI

extension Color: RawRepresentable {
    public init?(rawValue: String) {
        guard let data = Data(base64Encoded: rawValue) else {
            self = .black
            return
        }

        do {
            let color = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? UIColor ?? .black
            self = Color(color)
        } catch {
            self = .black
        }
    }

    public var rawValue: String {
        do {
            let data = try NSKeyedArchiver.archivedData(withRootObject: UIColor(self), requiringSecureCoding: false) as Data
            return data.base64EncodedString()
        } catch {
            return ""
        }
    }
}

これでエラーが消えたかと思います。

評価