【问题标题】:I am getting values in for loop. It is getting crashed我在 for 循环中获取值。它正在崩溃
【发布时间】:2019-05-10 10:34:27
【问题描述】:

我在 for 循环中从 Array[String:Any] 类型的数组中获取值,但是在 for 循环的第一行中它会崩溃。

实际上我已经创建了一个数组 (Array[String:Any]) 类型,现在我正在获取该数组的所有值以显示在 tableview 上,但它在 for 循环中崩溃了。

var ticketArray = [Any]()
var addTypeTicket = [String:Any]()
var imagesArray = [Any]()
var imagesFinal = [String:Any]()


let ticketDetails = ["ticketName":txtTicketName.text!,
                     "numberOfTicketOnSale":txtFldTotalQuantityofTicket.text!,
                     "ticketPrice":txtFldPriceofTicket.text!,
                     "messageForTicketBuyers":txtviewMessage.text!,
                     "ticketGroupName":txtFldGroupName.text!] as [String : Any]

ticketArray.append(ticketDetails)
print(ticketArray)
addTypeTicket["addTypeTicket"] = ticketArray
print(addTypeTicket)
viewShadowTicket.isHidden = true
viewForMainTicketAlert.isHidden = true

for alltickets in addTypeTicket {
    let ticketName = (alltickets as AnyObject).object(forKey: "ticketName") as! String
    let Quantity = (alltickets as AnyObject).object(forKey: "numberOfTicketOnSale") as! String
    let ticketPrice = (alltickets as AnyObject).object(forKey: "ticketPrice") as! String
    let arr = structTickets(ticketName: ticketName, numberOfTicketOnSale: Quantity, ticketPrice: ticketPrice)
    self.arrayTickets.append(arr)
}
self.tableview.reloadData()
tableview.isHidden = false

我只想在 for 循环中获取值。

【问题讨论】:

  • 什么崩溃?你能显示输出吗?
  • 您正在使用!签了很多,你期望什么?,你强制解开可能为 null 的值,这就是你的应用程序崩溃的原因
  • 您使用了太多不必要的强制展开。避免这种情况。即使是一个错误也会导致崩溃。
  • 你确定所有这些值都是字符串类型的吗?
  • alltickets as AnyObject(bridge cast to NSObject) 是可怕的语法。实际上ticketDetails[String:String],因此ticketArray[[String:String]]。如果实际类型是已知且唯一的,切勿使用Any

标签: ios swift nsarray


【解决方案1】:

如果您没有在其他任何地方使用ticketArray,则无需向该数组添加数据。您可以通过以下方式简单地将数据添加到addTypeTicket 字典:

addTypeTicket["addTypeTicket"] = ticketDetails

然后你可以这样获取数据:

if let addTypeTicketData = addTypeTicket["addTypeTicket"] as? [String: String] {
    let ticketName = addTypeTicketData["ticketName"]
    let quantity = addTypeTicketData["numberOfTicketOnSale"]
    let ticketPrice = addTypeTicketData["ticketPrice"]
    let arr = structTickets(ticketName: ticketName, numberOfTicketOnSale: quantity, ticketPrice: ticketPrice)
    self.arrayTickets.append(arr)
}

并将arrayTickets 用于tableView's numberOfRowsInSection

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2019-08-19
    • 2018-12-06
    相关资源
    最近更新 更多