遍历数组以获取项目的索引 - 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 作为参数。
我自己设法以稍微不同的方式解决了这个错误。
在填充 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 方法,但它确实有效。
我认为这些问题是由于函数 运行 在一个单独的线程上引起的。
我正在尝试遍历名称数组以获取特定字符串的索引。然后我想将我的 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 作为参数。
我自己设法以稍微不同的方式解决了这个错误。
在填充 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 方法,但它确实有效。
我认为这些问题是由于函数 运行 在一个单独的线程上引起的。