Ios 访问引用字典的任意类型数组的下标

Ios 访问引用字典的任意类型数组的下标,ios,swift,types,any,Ios,Swift,Types,Any,关于在ANY类型的对象数组上使用下标,有很多问题,通常建议将ANY对象强制转换为变量类型,该变量类型可以使用类似的下标 if let addresses = profile["Addresses"] as? [[String: Any]] 在我的例子中,数组是一个字典数组,其形式为(paramName:value)或(NSString:Float),然而,尽管所有答案都是如此,我还是无法找出语法来告诉编译器Any对象是字典 我的原始代码生成错误: func getStringFromSort

关于在ANY类型的对象数组上使用下标,有很多问题,通常建议将ANY对象强制转换为变量类型,该变量类型可以使用类似的下标

if let addresses = profile["Addresses"] as? [[String: Any]] 
在我的例子中,数组是一个字典数组,其形式为(paramName:value)或(NSString:Float),然而,尽管所有答案都是如此,我还是无法找出语法来告诉编译器Any对象是字典

我的原始代码生成错误:

func getStringFromSortedArray (sortedArray:Array<Any>) -> String{

for i in 0 ..< sortedArray.count {
  if let paramName = sortedArray[i]["param"]  {
               //run some code
}
func getStringFromSortedArray(sortedArray:Array)->String{
对于0中的i..
我试过了

for i in 0 ..< sortedArray.count {
  if let paramName = sortedArray[i]["param"] as? [[String: Any]]  {
               //run some code
}
0中的i的
,

如果让SorterDarray=SorterDarray为?[[Dictionary:Any]]{
对于0中的i..
还有很多变化都没有成功


有人能给我指出正确的语法来告诉编译器Any object是一个字典吗?如果有人认为这个问题以前已经得到了回答,我会很感激你给我举一个字典数组的例子,因为我已经看过了不同设置的答案。

如果我理解正确,你说的是de>sortedArray
是一组字典,如
[[String:Any]]
。我相信您也在说键“param”包含一个字符串,这就是您试图从这个函数中得到的。如果这是正确的,那么您似乎非常接近,但缺少一些东西:

func getStringFromSortedArray (sortedArray:Array<Any>) -> String {
  //If your sortedArray is an array of dictionaries let's cast it as such
  guard let dictionaries = sortedArray as? [[String : Any]] else { return "None Found" }
  for i in 0 ..< dictionaries.count {
    //Now we can loop through the dictionaries, and check that "param" contains a string
    if let paramName = dictionaries[i]["param"] as? String {
      //Now we have a reference to "paramName" and can return it or do whatever "run some code" means
           //run some code
  }
}
func getStringFromSortedArray(sortedArray:Array)->String{
//如果你的Darray是一系列字典,那么让我们将其转换为字典
guard let dictionaries=sortedArray as?[[String:Any]]else{返回“未找到”}
对于0中的i..

当然,您需要自定义如果
guard
语句失败会发生什么,如果for循环完成而没有找到您要查找的值,您还必须添加有效的返回值。

让我们看看第一行代码的问题:

  func getStringFromSortedArray (sortedArray:Array<Any>) -> String {
现在,如果你知道更多,你应该说更多。例如,如果你知道这些字典中的所有键都是字符串,你应该这样说:

  func getStringFromSortedArray (sortedArray:[[String:Any]]) -> String {
如果您知道字典中的值都是同一类型的,您也应该这样说:

  func getStringFromSortedArray (sortedArray:[[String:Float]]) -> String {

当你声明某事物的类型时,要尽可能地具体。

你已经走上了一条非常棘手的道路。与其试图解决这个问题,你要摆脱
任何
类型。如果你有
[String:Any]
几乎肯定可以转换为结构,然后
[Any]
将成为该结构的一个数组,所有这些问题都将消失。
任何
有时会在数据进入系统时出现,但您应该立即将其转换为实际类型。如果您传递类型为
[Any]
的值,则您走错了路。您的初始数据是什么样子的?总之是“正确的”如果让SorterDarray=SorterDarray为?[[String:Any]],则语法为
{
。字典的排序数组中有许多参数值,如按值排序的param1.42、param2.28、param3.22。@luk2302,这允许它进行编译,但我不明白什么是正确的。将数组向下转换为字符串或是引用浮点的字符串和any是什么意思?@user1904273
[string:any]
只是你说“Dictionary”的方式。(从技术上讲,它应该是
[AnyHashable:Any
],但在现实生活中,键通常是字符串,所以最好这样说。)所以“Dictionary数组”是
[[String:Any]]
  func getStringFromSortedArray (sortedArray:[[String:Any]]) -> String {
  func getStringFromSortedArray (sortedArray:[[String:Float]]) -> String {