私はUISegmentedControlを学習しようとしていて、ifステートメント内で動作するようにして、選択に基づいて1つの値を返し、他の選択に基づいて別の値を返す方法を理解したいと考えています。 UISegmentが返すことができる値は「固定」または「Varibale」の2つだけです。以下のコードは動作しませんが、私が望むものを提供します。 2つの変数はあらかじめ定義されています。UISegmentedControl ifステートメント
@IBAction func calPenalty(_ sender: UIButton) {
let startDate = termStartDate.text
let mortgageTerm = Double(mortgageTermLabel.text!)
let discount = Double(mortgageDiscountLabel.text!)
let mtgCashback = Double(casbackRecieved.text!)
let mtgBalance = Double(mortgageBalance.text!)
let rate = Double(currentRate.text!)
//let mortgageType = mortgageType
let lender = Global.selectedRate
if let oneYear = Double((lender?.oneYear)!),
let twoYear = Double((lender?.twoYear)!),
let threeYear = Double((lender?.threeYear)!),
let fourYear = Double((lender?.fourYear)!),
let fiveYear = Double((lender?.fiveYear)!) {
let maturityDate = (getMaturityDate(startdate: startDate!, termMonths: Int(mortgageTerm!)))
let monthsToMaturity = daysBetweenDates(endDate: maturityDate)/365*12
let comparisonTerm = (IRDComparisonTerm(monthsToMaturity: monthsToMaturity))
let cashback = cashbackRepayment(cashbackRecieved: mtgCashback!, mtgTerm: Double(mortgageTerm!), mthsToMaturity: Double(monthsToMaturity))
print(cashback)
var comparisonRate: Double = 0
switch comparisonTerm
{
case 12:
comparisonRate = oneYear
case 24:
comparisonRate = twoYear
case 36:
comparisonRate = threeYear
case 48:
comparisonRate = fourYear
case 60:
comparisonRate = fiveYear
default:
comparisonRate = 0
} // end switch statement
print(comparisonRate)
let IRD = IRDPenalty(IRDComparisonRate: comparisonRate, mtgBalance: mtgBalance!, mthsToMaturity: Double(monthsToMaturity), discount: discount!, currentRate: rate!)
let threeMthsInterestPenalty = threeMonthsInterestPenalty(mtgBalance: mtgBalance!, mtgRate: rate!)
print (IRD)
print (threeMthsInterestPenalty)
var penalty: Double = 0
// var totalPenalty: Double = 0
if IRD > threeMthsInterestPenalty {
penalty = IRD + cashback
}else{
penalty = threeMthsInterestPenalty + cashback
}
// totalPenalty = penalty + cashback
calculationLabel.text = String(penalty)
}
}
// triggers result based on value selected
@IBAction func valueChanged(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
calculationLabel.text = String(penalty)
case 1:
calculationLabel.text = String(threeMthsInterestPenalty + cashback)
default:
calculationLabel.text = String(penalty)
}
}
編集:私はまだこの問題に取り組んでいます。上記のコードを更新して、IBAction内のすべてのコードを表示しました。 @IBActionは、変数がコード内のどこに投稿されたかに基づいて未定義であるため、機能しません。ストーリーボードには、固定値と変数の値を持つUIsegmentedControlがあります。ユーザーが固定値を選択した場合、UISegementコントロールのIBActionで表示します。
にあなたが投稿したコードへのコンテキストがありません。使用されているすべての変数は何ですか?あなたが実際にやろうとしていることは何ですか?また、 'UISegmentedControl'は値を返しません。どのセグメントが選択されているかを判断するだけです。 – rmaddy
どの変数が未定義ですか? – Lawliet