创建两个数组,然后在第三个数组中使用它们,用作两个微调器 uipickerview 的数据
Create two arrays and then use them in a third array used as data for a two spinner uipickerview
您好,我正在尝试创建我的第一个 IOS 应用程序,它使用带有两个微调器的 uiPickerView。
从各种教程中我发现选择器数据是这样定义的:
var pickerData = [["value1","value2", "value3"],["valueA", "valueB"]]
因为我有很多值,所以我想我会动态创建它们
我的密码是:
var poundValues = [String]()
var penceValues = [String]()
for var indexP:Int = 0; indexP < 100; indexP += 1 {
poundValues.append("£ \(indexP)")
}
for var pindex:Int = 0; pindex < 100; pindex += 1 {
penceValues.append(".\(pindex)")
}
let pickerData = [poundValues,penceValues]
不幸的是,我遇到了编译器错误,而且我不知道如何更正。第一个错误发生在 "for var" 行...Consecutive declarations on a line must be separated by ';'
但我确实有 ;s 到位。
第二个在 "let pickerData" 行...'ViewController.Type' does not have a member named 'poundValues'
同样在 penceValues 中,我想用前导 0 填充单个数字,以便微调器显示 .00 .01 .02 .... .09 .10 .11 等
感谢任何帮助。
将你的代码粘贴到 playground 后我没有出现这些错误 "as is",所以我认为它周围的代码有问题 - 可能是未闭合的括号?
至于你的代码,你可以去掉2个for循环,简化如下:
let poundValues = map(0..<100) { "£ \([=10=])" }
let penceValues = map(0..<100) { ([=10=] < 10 ? "0" : "") + "\([=10=])" }
penceValues
数组包含前 10 个元素和附加的 0
前缀。
您提供的代码可以按原样编译,但您可以保存第二个循环,因为两个 for 循环都遍历相同的索引。此外,下面是用于填充个位数的格式。
var poundValues = [String]()
var penceValues = [String]()
for var indexP:Int = 0; indexP < 100; indexP += 1 {
poundValues.append("£ \(indexP)")
penceValues.append(NSString(format: ".%02d", indexP) as String)
}
let pickerData = [poundValues, penceValues]
完整地查看您的 UIViewController 子类将有助于解决您所看到的构建错误。
我不知道是什么原因导致您的代码中断,但想向您展示一个替代解决方案。您根本不必创建数组。我假设您在 titleForRow 方法中使用数组值。您可以在其中生成值,而不是使用数组:
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return "£ \(row)"
}
else {
return String(format: ".%.02d", arguments: [row])
}
}
您好,我正在尝试创建我的第一个 IOS 应用程序,它使用带有两个微调器的 uiPickerView。
从各种教程中我发现选择器数据是这样定义的:
var pickerData = [["value1","value2", "value3"],["valueA", "valueB"]]
因为我有很多值,所以我想我会动态创建它们
我的密码是:
var poundValues = [String]()
var penceValues = [String]()
for var indexP:Int = 0; indexP < 100; indexP += 1 {
poundValues.append("£ \(indexP)")
}
for var pindex:Int = 0; pindex < 100; pindex += 1 {
penceValues.append(".\(pindex)")
}
let pickerData = [poundValues,penceValues]
不幸的是,我遇到了编译器错误,而且我不知道如何更正。第一个错误发生在 "for var" 行...Consecutive declarations on a line must be separated by ';'
但我确实有 ;s 到位。
第二个在 "let pickerData" 行...'ViewController.Type' does not have a member named 'poundValues'
同样在 penceValues 中,我想用前导 0 填充单个数字,以便微调器显示 .00 .01 .02 .... .09 .10 .11 等
感谢任何帮助。
将你的代码粘贴到 playground 后我没有出现这些错误 "as is",所以我认为它周围的代码有问题 - 可能是未闭合的括号?
至于你的代码,你可以去掉2个for循环,简化如下:
let poundValues = map(0..<100) { "£ \([=10=])" }
let penceValues = map(0..<100) { ([=10=] < 10 ? "0" : "") + "\([=10=])" }
penceValues
数组包含前 10 个元素和附加的 0
前缀。
您提供的代码可以按原样编译,但您可以保存第二个循环,因为两个 for 循环都遍历相同的索引。此外,下面是用于填充个位数的格式。
var poundValues = [String]()
var penceValues = [String]()
for var indexP:Int = 0; indexP < 100; indexP += 1 {
poundValues.append("£ \(indexP)")
penceValues.append(NSString(format: ".%02d", indexP) as String)
}
let pickerData = [poundValues, penceValues]
完整地查看您的 UIViewController 子类将有助于解决您所看到的构建错误。
我不知道是什么原因导致您的代码中断,但想向您展示一个替代解决方案。您根本不必创建数组。我假设您在 titleForRow 方法中使用数组值。您可以在其中生成值,而不是使用数组:
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return "£ \(row)"
}
else {
return String(format: ".%.02d", arguments: [row])
}
}