Arrays 在数组中循环以获取item-swift的索引

Arrays 在数组中循环以获取item-swift的索引,arrays,swift,uipickerview,Arrays,Swift,Uipickerview,我试图循环遍历一个名称数组,以获取某个字符串的索引。然后我想将UIPicker的索引设置为所述字符串 我有以下代码,但这会导致应用程序崩溃: let index = self.nameArray.index(where: {$0 == assetArray[0].Owner }) scroll_owners.selectRow(index ?? 0, inComponent: 0, animated: true) 调试索引时,索引的值为6176573120,这当然不在我的UIP

我试图循环遍历一个名称数组,以获取某个字符串的索引。然后我想将UIPicker的索引设置为所述字符串

我有以下代码,但这会导致应用程序崩溃:

let index = self.nameArray.index(where: {$0 == assetArray[0].Owner })
        scroll_owners.selectRow(index ?? 0, inComponent: 0, animated: true)
调试索引时,索引的值为6176573120,这当然不在我的UIPicker的范围内,因此会导致崩溃

你知道为什么会这样吗

使用建议的答案会引发以下错误:

unrecognized selector sent to instance 0x101134af0'
assetArray[0]中肯定存在与正在传递的名称匹配的项

如果再进行一点调查,尝试单独运行以下代码行,则会出现相同的错误:

scroll_owners.selectRow(0, inComponent: 0, animated: true)
这是否意味着我缺少委托方法

资产数组和名称数组:

var assetArray : [Asset] = []

var nameArray = [String]()
编辑:

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
}

    self.scroll_owners.delegate = self
    self.scroll_owners.dataSource = self
我试图用另一种方式来实现这一点——我知道这是一种丑陋的方式,我只是想看看为什么公认的快速方式不起作用:

            var i : Int = 0
        while (nameArray[i] != name)
        {
            print(nameArray[i])
            i=i+1
        }
        scroll_owners.selectRow(i, inComponent: 0, animated: true)

这段代码崩溃,并且由于索引超出范围而从未输入while循环-这是否意味着问题可能与nameArray有关?

我认为问题在于。索引不返回indexath。 但是selectRow需要一个indexPath作为参数


我自己用一种稍微不同的方法解决了这个错误

在填充nameArray和UIPicker的函数中,我放置了以下代码:

                var i : Int = 0
            while (self.nameArray[i] != name)
            {
                print(self.nameArray[i])
                i=i+1
            }
            self.scroll_owners.selectRow(i, inComponent: 0, animated: true)
代码崩溃的原因是,在我尝试进行比较之前,nameArray没有完成填充。我知道这可能不是公认的快速方式,但它是有效的


这些问题是由于函数在一个单独的线程上运行而引起的。我相信。

您可以用assetArray类和NameArrary的声明更新问题,并说明它不识别哪个选择器吗?[UIView NumberOfComponents SinPickerView:]:发送到实例0x154037720的无法识别的选择器看起来
scroll\u owners
不是
UIPicker
@IBOutlet弱var scroll\u owners:UIPickerView!