创建两个数组,然后在第三个数组中使用它们,用作两个微调器 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])
        }
    }