arrays - Swift - 将结构数组传递给另一个结构的初始化

标签 arrays swift struct init

如何初始化包含另一个结构数组的结构?

我想创建一个发票条目,其中的所有属性和项目都具有一个 InvoiceItem 数组。

此外,当发票仍为草稿时,项目可以为空。

从服务器读取带有发票数据和项目的 JSON 响应工作正常。

关于我拥有的 View Controller 的保存操作:

var invoice: Invoice?
var client: Client?
var invoiceItems : [InvoiceItem] = [InvoiceItem]()

@IBAction func saveInvoice(_ sender: Any) {

...

invoice = Invoice(invoice_id: invoice?.invoice_id, client_id: client_id, tax: 0.00, date_issue: dateIssue, due_date: dueDate,
amount_paid: 0.00,
date_transaction: "0000-00-00",
voided: 0,
note: "",
invoice_number: "",
status: "",
items: invoiceItems
)

override func viewDidLoad() {

...
 invoiceItems = (invoice?.items)!
...
}

我收到此错误:无法将类型“[InvoiceItem]”的值转换为预期的参数类型“InvoiceItem”,在线:项目:invoiceItems

struct InvoiceItem: Codable {
    var invoice_detail_id: Int!
    let description: String!
    let unit_price: Decimal!
    let quantity: Decimal!

    init(invoice_detail_id: Int! = nil, description: String, unit_price: Decimal, quantity: Decimal) {
        self.invoice_detail_id = invoice_detail_id
        self.description = description
        self.unit_price = unit_price
        self.quantity = quantity
    }
}

struct Invoice: Codable {
    var invoice_id: Int!
    let client_id: Int!
    let tax: Decimal!
    let date_issue: String!
    let due_date: String!
    let amount_paid: Decimal!
    let date_transaction: String!
    let voided: Int!
    let note: String!
    let invoice_number: String!
    let status: String!
    let items: [InvoiceItem]!

    init(invoice_id: Int! = nil, client_id: Int! = nil,tax: Decimal, date_issue: String, due_date: String, amount_paid: Decimal, date_transaction: String, voided: Int, note: String, invoice_number: String, status: String, items: InvoiceItem) {
        self.invoice_id = invoice_id
        self.client_id = client_id
        self.tax = tax
        self.date_issue = date_issue
        self.due_date = due_date
        self.amount_paid = amount_paid
        self.date_transaction = date_transaction
        self.voided = voided
        self.note = note
        self.invoice_number = invoice_number
        self.status = status
        self.items = [items]
    }


}

最佳答案

您的发票初始化有 items: InvoiceItem 作为参数。项目的类型是 InvoiceItem不是 InvoiceItem 的数组。

将类型更改为 InvoiceItem 的数组。

编辑:

在您的 Invoice init 中,您有:

self.items = [items]

您试图将 InvoiceItem 数组传递给定义为 items: InvoiceItem 的参数。

那显然不行,所以我告诉你将参数类型更改为 InvoiceItem 的数组。

现在您已将 InvoiceItem 数组包装在数组中。所以你有一个由 InvoiceItem 组成的数组。

将该行代码更改为:

self.items = items

关于arrays - Swift - 将结构数组传递给另一个结构的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034286/

相关文章:

python - 从 dict 创建 numpy 数组

ios - TableView 复制图像?

go - 在括号中初始化 Go 结构有什么作用?

c - 将结构从 main() 传递到辅助函数时出现段错误

ios - 部分屏幕中的 UIScrollView

if-statement - Golang 模板变量 isset

java - 如何自动从类数组转换为数组类

javascript 多维数组转 JSON

c++ - 随机 std::array

swift - Xcode6 无法使用类型的参数列表调用 'subscript'