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

问题描述 投票:-5回答:1

code for radio buttons 我目前正在使用Xcode在Swift中开发一个iOS应用程序,我的任务是创建两个单选按钮,这将对总价值产生影响。第一个单选按钮需要返回一个值,该值将四舍五入到最接近的整数或半数(.5),第二个单选按钮将仅向上或向下舍入到最接近的整数。我已经在View Controller中创建了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(向上舍入到最接近的整数)
ios swift xcode radio-button viewcontroller
1个回答
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) )
}
© www.soinside.com 2019 - 2024. All rights reserved.