swift 中的调用函数

Calling function in swift

构建 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" 发送到文本输入输出字段 "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

如何解决?谢谢你帮助了一个新手 :)

在您的代码中,n 被声明为 Int? 类型,这意味着 "Optional Int"。这是正常的,因为 toInt() 函数不能保证成功,如果文本不能转换为整数,则可能 return 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...

    }
}

问题是 n 是一个包装:

var n:Int?

所以你有几个选择,你可以在使用它时更改代码以解包(在执行此操作之前检查 nil 可能是个好主意,因为如果 n 为零):

var vypoctenaZavorka = mocnina(mocnenec: zavorka, mocnitel: n!)

或者您可以在创建时解包:

let n:Int = dobaSplaceni.text.toInt()!

如果你想更好地理解"when to use optionals",我已经对这个问题写了很长的解释: