2015-01-04 3 views
0

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를 계산하려고합니다.이 함수는 두 int를 사용하려는 "mocnina"함수이고, x는 "mocnenec"이고 y는 "mocnitel"입니다.

그리고 마지막으로 "splatka"변수에서 "intric filed"라는 텍스트 inout으로 최종 int를 보내려고합니다.

하지만 "mocnina"함수를 호출 오류를 얻고있다 ->은

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

에 결국 var vypoctenaZavorka = mocnina(mocnenec: zavorka, mocnitel: n) 어떻게 그것을 해결하기 위해? 초보자를 돕는 Thx :

+1

변수, 함수 등의 영어 이름을 사용하면 대부분의 사람들이 코드의 목적을 훨씬 쉽게 이해할 수 있습니다. –

+0

글쎄, 마지막 것은 쉽다'("\ splatka")''\ (splatka) "'이어야한다. (무료 Swift 서적을 읽고 연습 문제를 시도하는 것이 좋습니다.) –

+0

다른 주석가가 첫 번째 및 세 번째 질문에 대답했습니다. '외래 라벨'에 대한 중간은 기능이 아니고 클래스 방법이 아니기 때문에 명명 된 매개 변수와 함께 내부 이름뿐만 아니라 외부 이름이 필요합니다. https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html을 참조하십시오. – Grimxn

답변

0

문제는 n가 감싸 점이다 :

var n:Int? 

그래서 당신은 몇 가지 옵션이 있습니다, 당신은 (n이 전무 인 경우 예외가 발생합니다이로이 일을하기 전에 nil를 확인하기 위해 아마 좋은 생각) 당신이 그것을 사용할 때 그것을 푸는 코드를 변경 할 수 있습니다 :

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

또는 당신이 그것을 만들 때 당신은 그것을 랩을 해제 할 수 있습니다

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

는 "선택적 항목을 사용하는 경우"더 잘 이해하고 싶은 경우에, 나는 주제에이 질문에 아주 긴 설명을 서면으로 작성했습니다 : UIViewController variables initialization

0

코드에서 nInt? 유형으로 선언되며 "선택 사항 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... 

    } 
}