Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用两个集合类型参数查找项索引_Swift - Fatal编程技术网

Swift 使用两个集合类型参数查找项索引

Swift 使用两个集合类型参数查找项索引,swift,Swift,我已经检查了这一点,为不推荐的find方法找到了一个解决方案,但是这个解决方案是针对单个数组的。在我的项目中,我有两个参数,它们都是集合类型。通过重构,我收到了熟悉的条件绑定错误 我尝试过删除条件绑定并使用indexof:正如我引用的SO-answer中所述,但由于我不使用字符串类型之类的单个元素,因此自然会出现元组错误 如果无法对元组调用方法,那么为什么原始的find方法能够在下面的Swift 2行中调用元组 class MoneyPickerTableViewController: UITa

我已经检查了这一点,为不推荐的find方法找到了一个解决方案,但是这个解决方案是针对单个数组的。在我的项目中,我有两个参数,它们都是集合类型。通过重构,我收到了熟悉的条件绑定错误

我尝试过删除条件绑定并使用indexof:正如我引用的SO-answer中所述,但由于我不使用字符串类型之类的单个元素,因此自然会出现元组错误

如果无法对元组调用方法,那么为什么原始的find方法能够在下面的Swift 2行中调用元组

class MoneyPickerTableViewController: UITableViewController {   

var money: [String: String]
var purchaseOrder: [String]
var chosenKey: String = USDPreferences.shared().object(forKey: kUSDChosenMoneyKey) as! String    

// Swift 2
if let index = find(purchaseOrder, chosenKey) {
let indexPath = NSIndexPath(forRow: index, inSection: 0)

tableView.selectRowAtIndexPath(indexPath, animated: animated, scrollPosition: .Middle)
}    

navigationController?.setNavigationBarHidden(false, animated: animated)
}
斯威夫特3

let collections = (purchaseOrder, chosenKey) as ([String], String) 
let index = collections.index(of: )
以前是一个自由函数,它将集合作为第一个参数,所需元素作为第二个参数

自Swift 2以来,此功能现在作为集合的实例方法实现,称为

chosenKey以前是purchaseOrder,现在拼写为purchaseOrder.indexof:chosenKey

您的Swift3尝试与您的Swift2代码无关。 在Swift2代码findpurchaseOrder中,chosenKey返回字符串数组中字符串变量chosenKey的索引purchaseOrder。在Swift3代码中,您试图从字符串数组和搜索字符串中创建一个元组,并查找元组中的元素,但这永远不会起作用,因为您试图搜索具有非元组值的元组

实际上,代码应该很简单:您只需要使用indexof:函数在purchaseOrder中查找chosenKey的索引,并将其用作行索引


您不能对元组调用方法,只希望该方法应用于每个元组成员。这可不是我想要的,谢谢。我意识到这一点。这就是为什么我说我很自然地会犯这些错误。我正在寻找一种方法来索引这两个集合。原始代码使用findpurchaseOrder、chosenKey进行索引。p、 find方法以前对元组很好,为什么现在不行呢?那不是元组,它是一个函数调用,包含两个参数purchaseOrder和chosenKey。好的,我理解是因为find方法,它是一个函数调用。现在没有函数调用,所以它是一个元组。我必须使用indexof.再次进行函数调用。是。看,我的回答集合不是集合。它是一个包含[String]和[String]的元组。。。请参阅my editindex=PurcheOrderOf:chosenKey给我一个非函数类型“[String]”的无法调用值错误。显然,因为purchaseOrder不是一个函数类型。@tymac这是一个输入错误,所以它应该是purchaseOrder.indexof:chosenKey。修好了,请告诉我这里的礼节。Alexander首先给了我答案,但它需要一个简单的编辑,我应该能够发现,而David的答案是完整的答案,包括奖金守卫。好吧,这是你的选择,你接受谁的答案,选择一个你觉得对你更有帮助的答案。如果两个答案都有帮助,你可以同时投票:对不起,大卫。我不得不把它交给亚历克斯,因为他已经布置好了所有的基础工作。我给了你一票显然是因为我利用了你的防守。我通常会给你正确的答案,因为你给了它所有的完整代码,但这个案例是不同的。
guard let row = purchaseOrder.index(of: chosenKey) else { return }
let indexPath = IndexPath(row: row, section: 0)
tableView.selectRow(at: indexPath, animated: animated, scrollPosition: .middle)