首页 > 解决方案 > 我需要帮助使用 Swift 在视图控制器中创建两个单选按钮

问题描述

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

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

单选按钮 #1:

单选按钮 #2:

标签: iosswiftxcoderadio-buttonviewcontroller

解决方案


根据您的要求有两个功能。在您的原始代码中,它呈现与 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) )
}

推荐阅读