Swiftmultidimensional array
我正在研究一些使用generics的代码。 这是我想要实现的一个例子:
var strings: Array<Array<String>> = [["1", "2", "3"], ["4", "5", "6"]] var array: Array<Array<AnyObject>> = strings
但是编译器说“'String'与'AnyObject'不一样”。 我不知道为什么编译器抱怨,以及如何实现我所需要的。
我已经试过像这样:
var array: Array<Array<AnyObject>> = strings as Array<Array<AnyObject>>
没有任何成功。
你们有什么想法吗?
谢谢。
这是行不通的,因为,正如编译器所说, AnyObject
不是 String
,尽pipe可以将AnyObject
为String
,反之亦然。
它甚至不使用可能看起来“兼容”的不同值types:
var array1: Array<Array<UInt>> = [] var array2: Array<Array<Int>> = array1
做你所需要的唯一方法是编写一个转换器,给定一个包含String
types对象的String
返回一个AnyObject
数组。
原因是,即使两种数据types兼容,它们也不会使用相同数量的内存,并且可能具有不同的数据成员和初始化限制。
考虑到数组是值types,赋值不是通过引用完成的 – 而是创build一个数组副本并将其分配给目标variables。 如果基础数据types对于赋值的左侧和右侧是相同的,则可以将数组中的每个项目逐个字节地复制以创build它的副本。 如果左边和右边有不同的types,那是不可能的,因为它们很可能以不同的方式使用内存(即它们可能具有不同的数据成员),所以在这种情况下,对象应该通过初始化器实例化,但是哪一个并使用哪些参数?