
Cannot convert value of type
'[String:AnyObject]'to expected argument type'@noescape ([String:AnyObject])'throws -> Bool”
//today = NSDate()//array : [[String:AnyObject]]// I use if let because of we might Now get element in the array matching our conditionif let elementOfArray = array.filter({let letters: [String] = ["x","y","z","a","b","c"]let index = letters.indexOf { == "a"}["ID"] as? Int == anotherDictionary["matchID"] as? Int && (["nextFireDate"] as? NSDate)?.compare(today) == NSComparisonResult.OrderedAscending}).first { let index = array.indexOf(elementOfArray) // error here} 我做错了什么?我不明白:/
我的目标是找到该项目的索引,我认为我打开替代解决方案,但当然这是首选,因为我认为这是“正确的方式”。
Swift数组上的indexOf方法不会获取与数组类型匹配的类型的对象。相反,它需要关闭。该关闭采用数组类型的元素并返回一个bool。所以,实际上,除非我们实际需要结果的数组,否则我们不会(而且不应该)甚至打扰过滤器调用。如果我们只是寻找第一个通过任何您正在过滤的测试的对象,那么我们只需要将相同的测试传递给indexOf。
所以,为了保持简单,如果我们有一个数组的字符串(我们假设它们都是单字母的字符串,很多重复),我想找到字符串“a”的第一个索引,而不是过滤将数组转换为“a”的字符串,然后找到通过第一个方法传递该测试的第一个字符串,然后找到该确切对象的索引,而不是将该测试传递到indexOf方法中:
为了清楚起见,似乎简单地传递一个单独的元素并寻找在某些情况下确实有效。它可能依赖于Swift的Equatable协议。我可以这样简单地使用used letters.indexOf(“a”)。编译器本来会很开心但是显然,并不是每个数组都被组合成持有符合Equatable的东西,而且数组不能对如何比较其元素做出假设。在这些情况下,您将必须使用上述传递闭包的示例。可能值得注意的是,将这个闭包传递给indexOf而不是首先过滤,然后调用indexOf将会非常有效地提高效率,即使您的数组允许使用letters.indexOf(“a”)方法。例如,如果我有更复杂的字符串,而且我只想要以字母“a”开头的第一个字符串,这比从原始数组过滤到以“一个’。
总结以上是内存溢出为你收集整理的数组 – Swift:在调用indexOf之后,使用filter函数过滤后,不能将类型的值转换为@noescape全部内容,希望文章能够帮你解决数组 – Swift:在调用indexOf之后,使用filter函数过滤后,不能将类型的值转换为@noescape所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)