【问题标题】:Storing and getting data form a Array of Arrays in Swift在 Swift 中存储和从数组中获取数据
【发布时间】:2015-03-15 22:37:02
【问题描述】:

我正在研究 Swift,但我在多维数组上遇到了一些问题。在操场上,我测试了这段代码:

//some class
class Something {
    var name:String = ""
}

//i create an array (will store arrays)
var array = [NSArray]()

//create some Something objects
var oneSomething:Something = Something()
var twoSomething:Something = Something()

//fill Something names for sample
oneSomething.name = "N1"
twoSomething.name = "N2"

//create an array of Something's
var array2 = [Something]()

//append the two objets to array2
array2.append(oneSomething)
array2.append(twoSomething)

//append array2 to array N times just for testing
array.append(array2)
array.append(array2)

//on playground I test what I'm storing:
array[0]
array[0][0]
array[0][0].name

这是我在最后 3 行得到的结果:

因此,在第一行中,我正确访问了第一级数组,在第二行中,我正确访问了第二行两个...但是...在第三行中,我得到了“nil”而不是 Something 对象的名称。我做错了什么,在这个例子中如何存储和获取多维数组。

谢谢。

【问题讨论】:

    标签: ios arrays xcode swift


    【解决方案1】:

    因为你声明:

    var array = [NSArray]()
    

    代替:

    var array = [[Something]]()
    

    NSArray来自Objective-C,Swift不清楚里面是什么,所以编译器不知道数组包含什么类型的对象。

    但是,如果你想离开 var array = [NSArray](),你必须投它:

    (array[0][0] as Something).name
    

    告诉编译器这是Something 类型。然后编译器知道该对象的属性。否则这是AnyObject,其属性未知。

    【讨论】:

      【解决方案2】:

      问题是你在数组里面放了一个对象Something。

      你需要把它作为对象类型解包

      if let object = array[0][0] as? Something {
          object.name
      }
      

      或者你需要将数组定义为包含Something对象的数组

      //i create an array (will store arrays)
      var array = [Array<Something>]()
      ...
      array[0][0].name
      

      问候

      【讨论】:

        猜你喜欢
        • 2017-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 2014-02-28
        相关资源
        最近更新 更多