我需要使用Swift在View Controller中创建两个单选按钮的帮助

时间:2018-09-12 16:20:01

标签: ios swift xcode radio-button viewcontroller

code for radio buttons 我目前正在使用Xcode在Swift中开发一个iOS应用,我的任务是创建两个单选按钮,这会对总价值产生影响。第一个单选按钮需要返回一个四舍五入到最接近的整数或半数(.5)的值,第二个单选按钮仅会向上或向下舍入到最接近的整数。我已经在视图控制器(针对“设置”屏幕)中创建了UI单选按钮。希望使我的应用程序中的总价值根据所选择的相应单选按钮而受到影响。我需要帮助使其正常工作。

这是我给出的四舍五入规则:

单选按钮#1:

  • 0.0到0.24(向下舍入为零)

  • 0.25至0.49(最大为0.5)

  • 0.5到0.74(向下舍入到0.5)

  • 0.75至0.99(四舍五入到最接近的整数)

单选按钮2:

  • 0.00至0.49(向下舍入为零)

  • 0.50至0.99(四舍五入到最接近的整数)

1 个答案:

答案 0 :(得分:1)

根据您的要求有两个功能。在您的原始代码中,它的情况与roundHalf函数相同。

如果我的理解正确,则您的值应限制为0 <= x <= 1。因此,我添加了保护功能来保证这一点。

由于它是一个单选按钮,因此每次只能选择一个按钮。所以请禁用另一个。

@IBOutlet var unitPenRadioButton1 :   UIButton!
@IBOutlet var unitPenRadioButton2 :   UIButton!

func calculateInsulin(carbs: Double, bloodSugar : Double, icRatio: Double, correctionFactor: Double)-> Double{
    do{
    let carbResult = Double(carbs / icRatio)

    var bloodResult: Double = 0

    if bloodSugar - 150 > 1{
        bloodResult = (bloodSugar - 150) / correctionFactor
    }
    let wholeBloodResult = Double(Int (bloodResult))

    let fractionBloodResult = bloodResult - wholeBloodResult

    var roundedFaction : Double

    roundedFaction = unitPenRadioButton1.isSelected  ?  try roundHalf( fractionBloodResult) : try roundWhole(fractionBloodResult)

    let finalBloodResult = wholeBloodResult + roundedFaction

    let insulinResult  = carbResult + finalBloodResult

         return insulinResult
    }
    catch let error as NSError{
        print (error)
    }

    return Double.greatestFiniteMagnitude
}




private func roundHalf(_ value : Double ) throws ->  Double{
    guard  value >= 0 && value <= 1 else {
    throw NSError.init(domain: NSCocoaErrorDomain, code: 60010, userInfo: ["error" : "value is not within [0,1]"])
    }
    return  round(value * 2.0) / 2.0
}
private func roundWhole(_ value : Double )throws ->  Double{
    guard  value >= 0 && value <= 1 else {
    throw NSError.init(domain: NSCocoaErrorDomain, code: 60010, userInfo: ["error" : "value is not within [0,1]"])
    }
    return  round(value)
}

@IBAction func didTapHalfUnit (_ sender : Any){
    unitPenRadioButton2.isSelected = false
    unitPenRadioButton1.isSelected = true
    print( calculateInsulin(carbs: 100, bloodSugar: 170, icRatio: 600, correctionFactor: 45) )
}

@IBAction func didTapWholfUnit (_ sender : Any){
    unitPenRadioButton1.isSelected = false
    unitPenRadioButton2.isSelected = true
    print( calculateInsulin(carbs: 100, bloodSugar: 170, icRatio: 600, correctionFactor:45) )
}