Ios 在swift中对多个组件使用UIPickerView

Ios 在swift中对多个组件使用UIPickerView,ios,swift,components,uipickerview,Ios,Swift,Components,Uipickerview,你好,我一直在努力让这个工作多年,但没有成功,所以道歉,如果这对你们来说似乎很容易 我想使用一个3轮UIPickerView-第一轮didSelectRow值将用于更改其余两个轮的数组,但它们将与转换应用程序相同 当填充轮子时,它似乎向我抛出了一个错误,说任何对象都不同于字符串。我看不出有什么不对劲,但我知道我错过了一些基本的东西 任何指点都将不胜感激 莫蒂 // ViewController.swift // picker test import UIKit class ViewCon

你好,我一直在努力让这个工作多年,但没有成功,所以道歉,如果这对你们来说似乎很容易

我想使用一个3轮UIPickerView-第一轮didSelectRow值将用于更改其余两个轮的数组,但它们将与转换应用程序相同

当填充轮子时,它似乎向我抛出了一个错误,说任何对象都不同于字符串。我看不出有什么不对劲,但我知道我错过了一些基本的东西

任何指点都将不胜感激

莫蒂

//  ViewController.swift
//  picker test

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate {

    @IBOutlet weak var picker1Label: UILabel!
    @IBOutlet weak var picker2Label: UILabel!

    @IBOutlet weak var bigPicker: UIPickerView!

    var wheelContents = []
    var length = ["metres","feet","yards","inches","mm","cm","miles"]
    var volume = ["m3","US Gall","Imp Gall","Barrels", "cubic FT","litres"]
    var conType = ["length","volume"]


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        wheelContents = [conType,length,length]

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    //For main selection of type of conversion
    // returns the number of 'columns' to display.
    func numberOfComponentsInPickerView(bigPicker: UIPickerView) -> Int{

        return wheelContents.count

    }

    // returns the # of rows in each component..
    func pickerView(bigPicker: UIPickerView, numberOfRowsInComponent component: Int) -> Int{

        return wheelContents[component].count


    }

    func pickerView(bigPicker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!{

        return wheelContents[component][row]

    }
}

您需要告诉Swift您的
wheelContents
数组是
字符串的数组

var wheelContents:[[String]] = []

如果您没有明确给出
wheelContents
类型,Swift会推断它是
NSArray
,这就是给您带来问题的原因。

您需要说Swift,您的
wheelContents
是一个字符串数组数组:

var wheelContents:[[String]] = []
您还应该将
pickerView
的委托设置为
self
,因为您在类中处理委托。否则功能将无法正常工作:

//In the viewDidLoad method
bigPicker.delegate = self

由于您像这样声明了wheelContents
wheelContents=[]
,而没有指定其元素类型,编译器会自动推断它是AnyObject数组,也就是
[AnyObject]

这就是返回
wheelContents[component].count时生成错误的原因:此时编译器需要
字符串但您提供的是
任何对象


这是一个非常简单的修复方法,您应该在声明数组时指定它的内容。(这是一个字符串数组,也称为
[[String]]

您需要在viewDidLoad中设置pickerView的数据源以及委托

pickerView.dataSource = self