在构建iOS应用程序时,我遇到了在Swift中调用该函数的问题。
@IBOutlet weak var vyseHypoteky: UITextField!
@IBOutlet weak var dobaSplaceni: UITextField!
@IBOutlet weak var urokovaSazba: UITextField!
@IBOutlet weak var mesicniSplatka: UITextField!
@IBAction func zmenaVyseHypoteky(sender: UISlider) {
var currentValue = Int(sender.value)
vyseHypoteky.text = "\(currentValue)"
vypoctiSplatku()
}
@IBAction func zmenaDobySplaceni(sender: UISlider) {
var currentValue = Int(sender.value)
dobaSplaceni.text = "\(currentValue)"
}
@IBAction func zmenaUrokoveSazby(sender: UISlider) {
var currentValue = Int(sender.value)
urokovaSazba.text = "\(currentValue)"
}
func vypoctiSplatku () {
let HU:Int? = vyseHypoteky.text.toInt()
let ipa:Int? = urokovaSazba.text.toInt()
let n:Int? = dobaSplaceni.text.toInt()
var ipm = ipa! / 12
var zavorka = 1+ipm
var vypoctenaZavorka = mocnina(mocnenec: zavorka, mocnitel: n)
var citatel = HU! * ipm * vypoctenaZavorka
var jmenovatel = vypoctenaZavorka - 1
var splatka = citatel / jmenovatel
mesicniSplatka.text = ("\splatka")
}
func mocnina (mocnenec: Int, mocnitel: Int) -> Int {
var mocnina = 1
for _ in 1...mocnitel {
mocnina *= mocnenec
}
return mocnina
}
该应用正按我的公式计算一个数字。我想用我的函数计算x ^ y,这是" mocnina"函数我想要使用两个int,x是" mocnenec"而y是" mocnitel"。
最后我想从变量" splatka"发送最终的int。提交文本" mesicniSplatka"。
但是我在调用函数时遇到错误" mocnina" - > var vypoctenaZavorka = mocnina(mocnenec: zavorka, mocnitel: n)
Extraneous argument label 'mocnenec:' in call
Value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?
最后是mesicniSplatka.text = ("\splatka")
Invalid escape sequence in literal
如何解决? Thx用于帮助一个新手:)
答案 0 :(得分:0)
在您的代码中,n
声明为Int?
类型,表示“可选Int
”。这是正常的,因为toInt()
函数不能保证成功,如果文本不能转换为整数,则可能返回nil
。所以,你需要先解开它,如下所示:var vypoctenaZavorka = mocnina(mocnenec: zavorka, mocnitel: n!)
。或者,如果您不确定字符串的转换是否成功,请执行以下操作:
let HU:Int? = vyseHypoteky.text.toInt()
let ipa:Int? = urokovaSazba.text.toInt()
let n:Int? = dobaSplaceni.text.toInt()
if ipa != nil {
var ipm = ipa! / 12
var zavorka = 1+ipm
if n != nil {
var vypoctenaZavorka = mocnina(mocnenec: zavorka, mocnitel: n)
// etc...
}
}
答案 1 :(得分:0)
问题是n
是一个包裹的:
var n:Int?
所以你有几个选项,你可以在你使用它时更改你的代码来打开它(在这之前检查nil
可能是一个好主意,因为如果{{1}这会导致异常}是nil):
n
或者你可以在创建时解开它:
var vypoctenaZavorka = mocnina(mocnenec: zavorka, mocnitel: n!)
如果您想更好地理解“何时使用选项”,我已就此主题撰写了一个很长的解释:UIViewController variables initialization