UIPickerView 未正确显示计算值
UIPickerView not showing calculated values correctly
我正在制作一个选择器视图,以显示供用户选择的年龄范围。
年龄范围是:
1 到 24 个月大
3至17岁
我已经完成了所有的逻辑和模型,并且应用程序运行了。 1 到 24 个月显示正确,但年份范围内显示的值显示不正确。大多数部分显示“3 岁”,最后三行显示“4 岁”。这是我的代码:
出于某种原因,对于这两个 else if 语句,我得到了一个错误,我必须强制解包这些值(如果有人能解释那会很棒)。第三个 if 语句的问题在于值。
型号
struct Age {
var ageMonths: String
static var all: [Age] {
var ageArray = [Age]()
for months in 1...24 { // adds months 1 through 24
ageArray.append(Age(ageMonths: String(months)))
}
for months in Array(stride(from: 36, through: 204, by: 12)) { // adds years 3 through 17
ageArray.append(Age(ageMonths: String(months)))
}
return ageArray
}
}
视图控制器
var age: Age?
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if Int(Age.all[row].ageMonths) == 1 {
return Age.all[row].ageMonths + " month old"
} else if Int(Age.all[row].ageMonths)! > 1 && Int(Age.all[row].ageMonths)! < 36 {
return Age.all[row].ageMonths + " months old"
} else if Int(Age.all[row].ageMonths)! >= 36 {
return Age.all[row/12].ageMonths + " years old"
}
return ""
}
看起来你只是在最后一个 if 子句中有错别字
if Int(Age.all[row].ageMonths)! >= 36 {
return Age.all[row/12].ageMonths + " years old"
}
但它应该是这样的(语法可能很粗略,我只是在回忆)
if Int(Age.all[row].ageMonths)! >= 36 {
let years: Float = Int(Age.all[row].ageMonths)/12
return "\(years) years old"
}
我正在制作一个选择器视图,以显示供用户选择的年龄范围。
年龄范围是:
1 到 24 个月大
3至17岁
我已经完成了所有的逻辑和模型,并且应用程序运行了。 1 到 24 个月显示正确,但年份范围内显示的值显示不正确。大多数部分显示“3 岁”,最后三行显示“4 岁”。这是我的代码:
出于某种原因,对于这两个 else if 语句,我得到了一个错误,我必须强制解包这些值(如果有人能解释那会很棒)。第三个 if 语句的问题在于值。
型号
struct Age {
var ageMonths: String
static var all: [Age] {
var ageArray = [Age]()
for months in 1...24 { // adds months 1 through 24
ageArray.append(Age(ageMonths: String(months)))
}
for months in Array(stride(from: 36, through: 204, by: 12)) { // adds years 3 through 17
ageArray.append(Age(ageMonths: String(months)))
}
return ageArray
}
}
视图控制器
var age: Age?
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if Int(Age.all[row].ageMonths) == 1 {
return Age.all[row].ageMonths + " month old"
} else if Int(Age.all[row].ageMonths)! > 1 && Int(Age.all[row].ageMonths)! < 36 {
return Age.all[row].ageMonths + " months old"
} else if Int(Age.all[row].ageMonths)! >= 36 {
return Age.all[row/12].ageMonths + " years old"
}
return ""
}
看起来你只是在最后一个 if 子句中有错别字
if Int(Age.all[row].ageMonths)! >= 36 {
return Age.all[row/12].ageMonths + " years old"
}
但它应该是这样的(语法可能很粗略,我只是在回忆)
if Int(Age.all[row].ageMonths)! >= 36 {
let years: Float = Int(Age.all[row].ageMonths)/12
return "\(years) years old"
}