Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了数组 – Swift:在调用indexOf之后,使用filter函数过滤后,不能将类型的值转换为@noescape大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在Swift 2中,我收到一个错误: CAnnot convert value of type '[String:AnyObject]' to expected argument type '@noescape ([String:AnyObject])' throws -> Bool” //today = NSDate() //array : [[String:AnyObject]] // I u
在Swift 2中,我收到一个错误
//today = NSDate()
//array : [[String:AnyObject]]
// I use if let because of we might Now get element in the array matching our condition

if let elementOfArray = array.filter({$0["id"] as? Int == anotherDictionarY["matchID"] as? Int && ($0["nextFireDate"] as? NSDatE)?.compare(today) == NSComparisonResult.orderedAscending}).first {

   let index = array.indexOf(elementOfArray) // error here
}

我做错了什么?我不明白:/

我的目标是找到该项目的索引,我认为我打开替代解决方案,但当然这是首选,因为我认为这是“正确的方式”。

Swift数组上的indexOf@L_618_4@不会获取与数组类型匹配的类型的对象。相反,它需要关闭。该关闭采用数组类型的元素并返一个bool。

所以,实际上,除非我们实际需要结果的数组,否则我们不会(而且不应该)甚至打扰过滤器调用。如果我们只是寻找第一个通过任何您正在过滤的测试的对象,那么我们只需要将相同的测试传递给indexOf。

所以,为了保持简单,如果我们有一个数组的字符串(我们假设它们都是单字母的字符串,很多重复),我想找到字符串“a”的第一个索引,而不是过滤将数组转换为“a”的字符串,然后找到通过第一个@L_618_4@传递该测试的第一个字符串,然后找到该确切对象的索引,而不是将该测试传递到indexOf@L_618_4@中:

let letters: [String] = ["x","y","z","a","b","c"]

let index = letters.indexOf {
    $0 == "a"
}

为了清楚起见,似乎简单地传递一个单独的元素并寻找在某些情况下确实有效。它可能依赖于Swift的Equatable协议。我可以这样简单地使用used letters.indexOf(“a”)。编译器本来会很开心但是显然,并不是每个数组都被组合成持有符合Equatable的东西,而且数组不能对如何比较其元素做出假设。在这些情况下,您将必须使用上述传递闭包的示例。可能值得注意的是,将这个闭包传递给indexOf而不是首先过滤,然后调用indexOf将会非常有效地提高效率,即使您的数组允许使用letters.indexOf(“a”)@L_618_4@。例如,如果我有更复杂的字符串,而且我只想要以字母“a”开头的第一个字符串,这比从原始数组过滤到以“一个’。

大佬总结

以上是大佬教程为你收集整理的数组 – Swift:在调用indexOf之后,使用filter函数过滤后,不能将类型的值转换为@noescape全部内容,希望文章能够帮你解决数组 – Swift:在调用indexOf之后,使用filter函数过滤后,不能将类型的值转换为@noescape所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。