ios - 在 Swift 中转换语法以循环遍历数组数组

标签 ios objective-c arrays swift loops

我有一个 NSArray,其中包含在 Objective-C 中创建的 NSArrays 字符串。

我现在想在 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
            }

它给出错误:类型“Any”没有下标成员

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

最佳答案

你可以试试

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

您的 Array 元素的类型为 Any,因此在强制转换之前,您不能将 [] 与它们一起使用,当您使用目标中的桥接代码时,情况总是如此 - 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]

关于ios - 在 Swift 中转换语法以循环遍历数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53805880/

相关文章:

ios - FileSystem.documentDirectory 上的数据不会在 ios 中的应用商店更新中持续存在

ios - 在 Xcode 10 中构建时重置应用程序后 String.hashValue 不是唯一的

java - 方法引用

javascript - 更改字体时基于页面的加载 epub

objective-c - Objective-C 的 future ?

java - 尝试将数组的元素设置为父类(super class)对象时出现 ArrayStoreException

JavaScript:对于 join() 方法中的空标记,数组反向和连接无法按预期工作

ios - Objective C 访问其他类变量值

ios - 读取json文件并在 TableView 上显示错误:

ios - 当 iOS 应用程序处于挂起状态时,如何处理重大位置变化?