Xcode 为什么我必须按两次iAction按钮才能执行操作?
我正在制作一个应用程序,在按下iAction按钮时进行计算。它工作正常,但我必须按两下才能执行操作。有人有这方面的经验吗?下面是有关@iAction按钮的一些代码:Xcode 为什么我必须按两次iAction按钮才能执行操作?,xcode,swift,Xcode,Swift,我正在制作一个应用程序,在按下iAction按钮时进行计算。它工作正常,但我必须按两下才能执行操作。有人有这方面的经验吗?下面是有关@iAction按钮的一些代码: @IBAction func CalculateGPA(sender: AnyObject) { gpa = (gp + gp2 + gp3 + gp4 + gp5 + gp6 + gp7) / (ch
@IBAction func CalculateGPA(sender: AnyObject) {
gpa = (gp + gp2 + gp3
+ gp4 + gp5 + gp6
+ gp7) / (ch + ch2
+ ch3 + ch4 + ch5
+ ch6 + ch7)
gpaLabel.text = NSString(format: " Your GPA is %.2f", gpa) as String
//added if textField == ">9" after first submission
if textField1.text == "10"{
gpaLabel.text = "Enter 1-9 Credit Hours"
}
if textField2.text == "10"{
gpaLabel.text = "Enter 1-9 Credit Hours"
}
对于您的信息,此按钮进行计算并更改标签的输入。我想我必须按两次的原因是第一次按进行计算,第二次按更改标签以显示结果。首先,您用于计算GPA的公式不正确。你不应该像你现在做的那样,把总成绩加起来,除以总学时。你必须将每个年级乘以学时数,相加,然后除以总学时:
gpa = (gp * ch + gp2 * ch2 + gp3 * ch3 + gp4 * ch4 +
gp5 * ch5 + gp6 * ch6 + gp7 * ch7) /
(ch + ch2 + ch3 + ch4 + ch5 + ch6 + ch7)
此外,您可能希望在for循环中使用数组,以便在类的数量发生变化时可以处理任意数量的类。想象一下,如果你有100门课,将所有这些放在一个巨大的语句中会是愚蠢和耗时的:
gpa = (gp * ch + gp2 * ch2 + gp3 * ch3 + gp4 * ch4 +
gp5 * ch5 + gp6 * ch6 + gp7 * ch7 ... gp100 * ch100) /
(ch + ch2 + ch3 + ch4 + ch5 + ch6 + ch7 + ... ch100)
而是说:
var numerator: Int = 0
var totalCh : Int = 0
var gpa : Double = 0.0
// gp and ch should be arrays that are instance variables;
// they should already be filled in either in this function or
// from another location
for (var i: Int = 0; i < gp.count; i++) {
numerator += gp [i] * ch [i]
totalCh += ch [i]
}
if (totalCh > 0) {
gpa = Double (numerator) / Double (totalCh)
} else {
gpa = 0.0 // can't divide by 0. Might want an error message to user here
}
// ...
var分子:Int=0
var totalCh:Int=0
var gpa:Double=0.0
//gp和ch应该是作为实例变量的数组;
//应该已经在此函数中或
//从另一个地方
对于(变量i:Int=0;i0){
gpa=双(分子)/双(总CH)
}否则{
gpa=0.0//不能除以0。可能需要向此处的用户发送错误消息
}
// ...
此外,您应该在函数顶部对用户输入进行验证,而不是在完成计算之后。如果用户犯了错误,您应该向用户提供一些反馈,说明他做错了什么以及如何纠正错误(正如您所做的那样),但在所有验证都完成之前,不要进行任何计算
要回答您最初的问题,我们需要查看该函数的所有代码。如果textfield1和textfield2在其他地方填写,则可以查看它们的位置
您可能没有将iAction正确连接到按钮。进入连接检查器,点击故事板上的按钮,将看到的内容制作一个屏幕打印并发布在这里,这样我们就可以检查连接是否正确
但是,由于您必须按两次按钮才能看到任何结果,因此初始化失败的可能性更高,因此在您第一次按下按钮时,它的值为零或null,但在函数结束时它被初始化,因此当您再次按下按钮时,它进行了计算,并在标签中输入了答案
要确切地了解发生了什么,您应该尝试单步执行调试器。如果您没有这方面的经验,可以在IBAction函数的关键位置放置一组print语句,以查看正在计算的内容,查看正在执行的语句,并确保函数已经启动;至少在函数开头输入一个“输入iAction calculateGPA”。我想我们没有看到更大的画面。首先,textField1的相关代码在哪里?必须调试它!在action方法和single step中放置一个断点,以查看发生了什么,并在执行过程中检查变量。调试是一项最好及早学习的技能。哇,真是很棒的输入。我只希望在Xcode中有你一半的知识。非常感谢您的意见,我会仔细考虑一下,看看是否能落实您的一些建议。