Swift 只需使用结构中的一个属性

Swift 只需使用结构中的一个属性,swift,Swift,我正在尝试构建一个AddPeople对象来发布到端点。有人接受或拒绝这个请求。以下实现适用于Accept工作流 现在,我想知道如何在以下简化版本的实现中集成拒绝工作流。info对象只能有let userInfo=InformationAccept:请接受他或let userInfo=InformationReject:请接受他 我目前的执行情况如下: struct AddPeople: Codable { let id: String let info: Information

我正在尝试构建一个AddPeople对象来发布到端点。有人接受或拒绝这个请求。以下实现适用于Accept工作流

现在,我想知道如何在以下简化版本的实现中集成拒绝工作流。info对象只能有let userInfo=InformationAccept:请接受他或let userInfo=InformationReject:请接受他

我目前的执行情况如下:

struct AddPeople: Codable {
    let id: String
    let info: Information
}

struct Information: Codable {
    let Accept: String
    //let Reject: String ?????
}

if isAcceptBtnClicked{
    let userInfo = Information(Accept:"Please accept him")
}else
{
  // let userInfo = Information(Reject:"Please reject him") ????
}

let addPeople = AddPeople(id : userId, info: userInfo)

您可以尝试使用选项:

struct Information: Codable {
    let accept: String?
    let reject: String?

    init(accept: String? = nil, reject: String? = nil) {
        self.accept = accept
        self.reject = reject
    }
}
然后,您可以通过以下任一方式调用您的信息:

let userInfoAccept = Information(accept: "Please accept him")
let userInfoReject = Information(reject: "Please reject him")
请注意,将信息编码为JSON时,将跳过nil属性:

let data = try! JSONEncoder().encode(userInfoReject)
let jsonStr = String(data: data, encoding: .utf8)!
print(jsonStr) // prints {"reject":"Please reject him"}

你是否建议如下:让userInfo=InformationAccept:请接受他,拒绝:nil???@casillas我误解了你的问题。查看更新后的答案。但是当前的方法仍然将Reject作为参数发送,但它是nil。我只想发送其中一个,要么接受,要么拒绝。因为我正在形成一个要发布的json数据。端点只检查接受或拒绝。@casillas我看不出这个问题。我添加了编码代码-它只编码非nil属性。