遍历数组以获取项目的索引 - swift

Looping through an array to get index of item - swift

我正在尝试遍历名称数组以获取特定字符串的索引。然后我想将我的 UIPicker 的索引设置为所述字符串。

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

let index = self.nameArray.index(where: {[=11=] == 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

我试图以另一种方式实现它 - 我知道这是一种丑陋的方式我只是想看看为什么接受的 swift 方式不起作用:

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

由于索引越界,这部分代码崩溃并且从未进入 while 循环 - 这是否意味着问题可能出在 nameArray 上?

我认为问题在于 .index 不是 return IndexPath。 但是 selectRow 需要一个 indexPath 作为参数。

.index .selectRow

我自己设法以稍微不同的方式解决了这个错误。

在填充 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 没有完成填充。我知道这可能不是公认的 swift 方法,但它确实有效。

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