Avatar
import Foundation @propertyWrapper struct CheckBox: Codable { var wrappedValue: Bool init(wrappedValue: Bool) { self.wrappedValue = wrappedValue } init(from decoder: Decoder) throws { do { _ = try String(from: decoder) self.wrappedValue = true } catch { self.wrappedValue = false } } } struct POST: Decodable { @CheckBox var checked: Bool @CheckBox var unchecked: Bool } let checked = """ { "checked": "on" } """ let post = try JSONDecoder().decode(POST.self, from: checked.data(using: .utf8)!) assert(post.checked == true) assert(post.unchecked == false) Vaporで、<input type="checkbox" /> で送られてきたデータをBoolとしてデコードしたいのですがpropertyWrapperを用いてできないでしょうか? チェックされている場合は文字列が来るのですが、チェックされていない場合はそもそも何も送信されないため、propertyWrapperに処理が渡る前にデコード失敗してしまい不可能な気がしているのですが合っているでしょうか。