例如,asume
var hierarchicalFileSystem: [[String]] = []
这允许一个人支持一层文件夹,但似乎没有办法在Swift中创建一个像上面那样的数组,但是嵌套的String数组的数量是未定义的。
我在这里错过了什么吗?
答案 0 :(得分:2)
字符串数组(数组数组......)对表示文件系统没有多大意义。
我反而建议使用一个类或结构来表示文件系统中的对象。也许是这样的:
struct FileSystemObject {
let name: String
let extension: String?
let isFolder: Bool
let contents: [FileSystemObject]?
}
这样的事情让我们很好地代表了一个文件系统。
let fileSystem = [FileSystemObject]()
所以,这里的fileSystem
变量是FileSystemObject
的数组,它代表根。根目录中的每个对象都有自己的一组详细信息(它的名称,文件扩展名,如果它有一个,以及它是否是一个文件夹),如果它是一个文件夹,它有一个非零{{1}如果它是一个非空文件夹,contents
contents
数组FileSystemObject
包含更多文件系统对象(其中一些文件夹当然是包含内容的文件夹)。< / p>
答案 1 :(得分:2)
您可以做的是使用AnyObject创建一个数组并根据需要添加新的深度
var fileSystem: [AnyObject] = []
这对于表示文件系统来说是一种非常糟糕的方式,你应该采用某种树结构,如
struct Node {
children: [Node]?
parent: Node?
name: String
}
答案 2 :(得分:0)
Swift是类型安全的语言。您必须声明变量的类型,或将其设置为AnyObject
,但请不要。所以,回答你的问题:是它可能:
var array: [AnyObject] = [[[1,2,3], [1,2,3]], [[1,2,3],[1,2,3]]]
但这太糟糕了。尝试找出更好的代表问题。也许是定制结构。
答案 3 :(得分:-1)
你可以拥有任意数量的维度数组。这是个好主意吗?我不认为......
var threeDArray: Array<Array<Array<String>>> = []
let oneDArray = ["1","2","3"]
let twoDArray1: Array<Array<String>> = [oneDArray, oneDArray, oneDArray, oneDArray, oneDArray]
let twoDArray2 = twoDArray1 + [["4","5","6"],["7","8","9"]]
threeDArray.append(twoDArray1)
threeDArray.append(twoDArray2)
let arr = [threeDArray,threeDArray,threeDArray]
print(arr.dynamicType) // Array<Array<Array<Array<String>>>>