【问题标题】:Swift multidimensional arraySwift 多维数组
【发布时间】:2014-08-24 10:04:59
【问题描述】:

我正在编写一段使用泛型的代码。这是我正在努力实现的一个例子:

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>>

没有任何成功。

你们有什么想法吗?

谢谢。

【问题讨论】:

    标签: ios arrays generics multidimensional-array swift


    【解决方案1】:

    这不起作用,因为正如编译器所说,AnyObject 不是 String,尽管您可以将AnyObject 转换为String,反之亦然。

    它甚至无法使用看起来“兼容”的不同值类型:

    var array1: Array<Array<UInt>> = []
    var array2: Array<Array<Int>> = array1
    

    做你需要的唯一方法是编写一个转换器,给定一个包含String类型对象的数组,返回一个AnyObject数组。

    原因是即使 2 种数据类型兼容,它们使用的内存量也不相同,并且可以有不同的数据成员和初始化约束。

    考虑到数组是值类型,分配不是通过引用完成的——而是创建数组的副本并将其分配给目标变量。如果赋值左侧和右侧的底层数据类型相同,则可以逐字节复制数组中的每个项目以创建它的副本。如果左侧和右侧有不同的类型,那是不可能的,因为它们很可能以不同的方式使用内存(即它们可能具有不同的数据成员),所以在这种情况下,对象应该通过初始化程序来实例化,但是哪个以及使用哪些参数?

    【讨论】:

      猜你喜欢
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 2016-02-13
      • 2022-11-27
      相关资源
      最近更新 更多