循环遍历数组以获取项目的索引 - swift
Posted
技术标签:
【中文标题】循环遍历数组以获取项目的索引 - swift【英文标题】:Looping through an array to get index of item - swift 【发布时间】:2017-11-16 08:19:15 【问题描述】:我正在尝试遍历名称数组以获取某个字符串的索引。然后我想将我的 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 上?
【问题讨论】:
你能用assetArray类和nameArray的声明更新问题吗 还有它是否说它无法识别哪个选择器? [UIView numberOfComponentsInPickerView:]:无法识别的选择器发送到实例 0x154037720 看起来scroll_owners
不是UIPicker
@IBOutlet weak var scroll_owners: UIPickerView!
【参考方案1】:
我认为问题在于 .index 不返回 IndexPath。 但是 selectRow 需要一个 indexPath 作为参数。
.index .selectRow
【讨论】:
【参考方案2】:我自己设法以稍微不同的方式解决了这个错误。
在填充 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的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中,当每对元素都是字符串时,如何遍历一个数组以获取 2 个变量?和一个字符串
在 Swift 5.1 中循环遍历多维/嵌套 JSON 数据