code for radio buttons 我目前正在使用Xcode在Swift中开发一个iOS应用程序,我的任务是创建两个单选按钮,这将对总价值产生影响。第一个单选按钮需要返回一个值,该值将四舍五入到最接近的整数或半数(.5),第二个单选按钮将仅向上或向下舍入到最接近的整数。我已经在View Controller中创建了UI单选按钮(对于我的设置屏幕)。希望是根据所选的相应单选按钮使我的应用程序中的总值受到影响。我需要帮助才能实现这一功能。
以下是我舍入的规则:
单选按钮#1:
单选按钮#2:
根据您的要求有两种功能。在原始代码中,它提供了与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) )
}