下面的代码尝试在按下按钮时为数组的每个新条目编制索引。因此,在按下按钮时自动对元素进行排序。
var arrayOfInt = [Int]()
@IBAction func submitText(_ sender: Any) {
if let text = enterText.text {
if let number = Int(text) {
var index = 0
for num in arrayOfInt {
if num > number {
arrayOfInt.insert(number, at: index)
break
}
index += 1
}
print(arrayOfInt)
} else {
print("Please enter number")
}
}}
打印时,这就是[]。没有打印数字。
答案 0 :(得分:0)
最初arrayOfInt是空数组。因此,当数组为空时,它永远不会进入内部
for num in arrayOfInt {
//Whatever is here
}
无论你想要达到什么目标,你的逻辑也是错误的。
数组已经排序(通过:(Element,Element) - > Bool)方法 您最好按如下方式编写代码: -
var arrayOfInt = [Int]()
@IBAction func submitText(_ sender: Any) {
if let text = enterText.text , let number = Int(text) {
arrayOfInt.append(number)
arrayOfInt.sort { return $0 > $1 } //Modify accordingly the order you want
print(arrayOfInt)
} else {
print("Please enter number")
}
}
答案 1 :(得分:0)
你的 arrayOfInt 变量没有元素,它是空的...所以 for 循环不会迭代零索引数组,它没有意义......这就是为什么大括号内的代码永远不会执行的原因。
如果您使用断点或使用打印声明调试代码,则此问题本身就会显示出来。
每次 guard 语句解决相同问题时,我会避免使用 if 。基本上是因为它看起来更具可读性,而且它是Swift方法的一种......同时你正在避开pyramid of doom。
我的建议是:
var arrayOfInt = [Int]()
@IBAction func submitText(_ sender: Any) {
guard let text = enterText.text else {
print("Please enter a number")
return
} // guard
guard let number = Int(text) else {
print("Can't creates an integer value from the given string.")
return
} // guard
arrayOfInt.append(number)
arrayOfInt.sort() // From lowest to highest by default.
//arrayOfInt.sort { $0 < $1 } // From lowest to highest using a higher order function.
//arrayOfInt.sort { $0 > $1 } // From highest to lowest using a higher order function.
} // submitText