代码之家  ›  专栏  ›  技术社区  ›  user1904273

强制转换语法以在swift中循环遍历数组

  •  2
  • user1904273  · 技术社区  · 6 年前

    我有一个 NSArray 组成的 NSArrays 在Objective-C中创建的字符串。

    现在我想在一个swift类中循环遍历数组中的项,并且在语法方面遇到了问题。

    原始的Objective-C数组如下所示:

    NSArray* shapes =@[@[@"square",@"square.png"],@[@"circle",@"circle.png"],@[@"square",@"square.png"]];
    

    我可以使用以下方法从Objective-C类获取并打印数组:

    let shapes:Array = Utilities.sharedInstance().getShapes
    

    但是,在数组中循环的以下内容没有编译:

    var term : String = ""
    var pic : String = ""
    for shape in shapes  {
    term  = shape[1] //ERROR HERE
    pic = shape[2] //SAME ERROR HERE
                }
    

    它给出了错误: Type 'Any' has no subscript members

    循环遍历元素的正确语法是什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Shehata Gamal    6 年前

    你可以试试

     let shapes = Utilities.sharedInstance().getShapes as! [[String]]
    

    你的 Array 元素属于类型 Any 因此,在强制转换之前,不能将[]与它们一起使用,在使用Objective-C中的桥接代码时,情况总是如此,因此必须具体说明使用的实际类型,我鼓励您

    struct Item {
       let term,pic:String
    }
    

    然后

    let res:[Item] = shapes.map { Item(term:$0[0],pic:$0[1]) }
    

    一个无关但重要的笔记

    NSArray* shapes = @[@"square",@"circle",@"square"];
    

    那么,附加.png的问题很简单,而不是 [[String]] 它的直接 [String]