【问题标题】:Displaying an Array of type Double on UILabel in Xcode在 Xcode 中的 UILabel 上显示 Double 类型的数组
【发布时间】:2016-08-09 18:46:07
【问题描述】:

我正在尝试制作一个基本的购物车应用程序,您可以在其中将商品添加到购物车中,将商品的成本存储在数组中,然后在单击“收据”时显示数组。但是,每次我在我的应用上单击“收据”时,模拟器都会崩溃并显示

"Thread1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)

在我的“allItems += item”代码行旁边。如果有人对如何使用 for in 循环在 UILabel 中显示我的数字数组有任何想法,请告诉我。我将在下面发布源代码。在此先感谢

class ViewController: UIViewController {

var priceOfApple = 1.75
var cart = [Double]()
var total = 0.00

@IBOutlet weak var appName: UILabel!
@IBOutlet weak var Balance: UILabel!
@IBOutlet weak var Instructions: UILabel!
@IBOutlet weak var redApple: UIButton!
@IBOutlet weak var appleInfo: UILabel!
@IBOutlet weak var addToCart: UIButton!
@IBOutlet weak var itemsPurchased: UILabel!


@IBAction func selectedApple(sender: AnyObject) {

    Instructions.hidden = true
    appleInfo.hidden = false
    addToCart.hidden = false
}

@IBAction func purchaseApple(sender: AnyObject) {

    cart.append(priceOfApple)
    total += priceOfApple
    Balance.text = "Balance : \(total)"
    Instructions.hidden = false
    appleInfo.hidden = true
    addToCart.hidden = true


}

@IBAction func viewReceipt(sender: AnyObject) {

    redApple.hidden = true
    Instructions.hidden = true
    itemsPurchased.hidden = false

    for item in cart {

        var allItems = Double(itemsPurchased.text!)!
        allItems += item
        allItems = Double(itemsPurchased.text!)!
    }
}
}

【问题讨论】:

  • item in cart 循环的主体非常混乱。在每次迭代中,您将创建一个带有标签内容的新变量allItems,然后添加item,最后将变量设置回标签的内容。除了混淆之外,itemsPurchased.textnil 或者文本不能用 Double 表示。
  • 我在每次迭代中创建变量 allItems 因为我希望显示数组中的所有项目。有没有更好的方法可以做到这一点?
  • 这段代码有两个严重的问题。更糟糕的是,该变量在循环范围之外不可见,并且您正在用新值永久覆盖以前的值。您应该在重复循环之前创建变量。将代码粘贴到 Playground 中并进行测试。

标签: swift for-loop for-in-loop


【解决方案1】:

如果我理解正确,这就是你应该做的:

首先,在for循环外创建一个变量, 然后在循环中,该变量将开始存储数组中以“”分隔的每个值。完成后,您可以在 Label 中显示其值。

  var itemsInCart = ""

    for items in cart{

        itemsInCart += String(items) + " "
    }

    itemsPurchased.text = itemsInCart

希望对你有帮助!!!

【讨论】:

  • 是的,这帮助很大!非常感谢您的帮助。非常感谢!
  • 很高兴能帮到你:)
【解决方案2】:

一种更清洁、更安全的方法:

let result = cart.flatMap { Double(itemsPurchased.text ?? String()) }.reduce(0: combine: +)

这样做,您不应再收到 EXC_BAD_INSTRUCTION,但您仍应检查文本是否可转换为 Double。

【讨论】:

  • 感谢您的解决方案,但我正在努力更好地了解使用 for-in 循环,并正在寻找使用 for-in 循环的答案。
猜你喜欢
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
相关资源
最近更新 更多