无法访问Swift中的多维数组

无法访问Swift中的多维数组,swift,Swift,我创建了一个多维数组,但当我试图在viewDidLoad中访问它时,应用程序崩溃。关于为什么会发生这种情况,有什么建议吗 我还尝试将我的数组定义为var-data:KeyLabelType[][],但这也没有帮助 class MyViewController: UIViewController { var data: Array<Array<KeyLabelType>> = [] init(nibName nibNameOrNil: String!,

我创建了一个多维数组,但当我试图在
viewDidLoad
中访问它时,应用程序崩溃。关于为什么会发生这种情况,有什么建议吗

我还尝试将我的数组定义为
var-data:KeyLabelType[][]
,但这也没有帮助

class MyViewController: UIViewController {

    var data: Array<Array<KeyLabelType>> = []

    init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!)  {

        let array1: KeyLabelType[] = [...]
        let array2: KeyLabelType[] = [...]
        let array3: KeyLabelType[] = [...]

        self.data = [array1, array2, array3]

        super.init(nibName: nibNameOrNil, bundle: nibBundle)
    }

    override func viewDidLoad()  {

        let count = self.data.count // Application crashes here
    }
}
编辑:
我向苹果公司(17340589)提交了一份缺陷报告。

这是一个缺陷,请在。这与swift中NSObject的子类化有一定关系

import Foundation

enum KeyLabelType: Character {
    case a = "a"
    case b = "b"
    case c = "c"
}

class MyClass: NSObject /* Removing NSObject here will fix the crash */ {
    var myData: Array<Array<KeyLabelType>>

    init() {
        let array1: Array<KeyLabelType> = [.a, .b]
        let array2: Array<KeyLabelType> = [.b]
        let array3: Array<KeyLabelType> = [.c]

        self.myData = [array1, array2, array3]
    }
}

var myObject = MyClass()
myObject.myData //Crash here, if subclassing NSObject. No crash if NSObject is removed

这是一个错误,请在报告。这与swift中NSObject的子类化有一定关系

import Foundation

enum KeyLabelType: Character {
    case a = "a"
    case b = "b"
    case c = "c"
}

class MyClass: NSObject /* Removing NSObject here will fix the crash */ {
    var myData: Array<Array<KeyLabelType>>

    init() {
        let array1: Array<KeyLabelType> = [.a, .b]
        let array2: Array<KeyLabelType> = [.b]
        let array3: Array<KeyLabelType> = [.c]

        self.myData = [array1, array2, array3]
    }
}

var myObject = MyClass()
myObject.myData //Crash here, if subclassing NSObject. No crash if NSObject is removed

您的
KeyLabelType
类是如何声明的?我刚刚在游乐场和一个应用程序中测试了你的代码,它正在工作。我声明它为
classkeylabeltype{}
,我声明
KeyLabelType
enum
。我有什么遗漏吗?你的代码没有问题。这只是一个猜测,但可能是因为您运行此代码太早,并且所有操作都需要在viewDidLoad中或之后进行?@GoodbyeStackOverflow我还尝试将所有操作都放入
viewDidLoad
,但我仍然遇到相同的错误。我在初始值设定项中设置了
self.data=[]
,然后在
viewdiload
中填充了
data
。如果将代码放在单独的类中,然后在viewdiload中创建该类的实例,则运行正常。此外,如果您创建了一个Int数组,该数组按照当前进程在ViewController代码中的预期工作。因此,我只能认为,由于数组或枚举创建的复杂性,它无法工作。您的
KeyLabelType
类是如何声明的?我刚刚在游乐场和一个应用程序中测试了你的代码,它正在工作。我声明它为
classkeylabeltype{}
,我声明
KeyLabelType
enum
。我有什么遗漏吗?你的代码没有问题。这只是一个猜测,但可能是因为您运行此代码太早,并且所有操作都需要在viewDidLoad中或之后进行?@GoodbyeStackOverflow我还尝试将所有操作都放入
viewDidLoad
,但我仍然遇到相同的错误。我在初始值设定项中设置了
self.data=[]
,然后在
viewdiload
中填充了
data
。如果将代码放在单独的类中,然后在viewdiload中创建该类的实例,则运行正常。此外,如果您创建了一个Int数组,该数组按照当前进程在ViewController代码中的预期工作。因此,我只能认为,由于数组或枚举创建的复杂性,它无法工作。当然,这对您没有帮助,因为您无法删除对UIViewController的依赖谢谢。我会报告的。这当然帮不了你,因为你不能删除对UIViewController的依赖谢谢。我会报告的。
import Foundation

class KeyLabelType: NSObject {
    let value: Int

    init(_ value: Int) {
        self.value = value
    }

}

class MyClass: NSObject {
    var myData: NSArray

    init() {
        var item = KeyLabelType(1)
        var array1: NSArray = [KeyLabelType(1), KeyLabelType(2)]
        var array2: NSArray = [KeyLabelType(1), KeyLabelType(2)]
        self.myData = [array1, array2]
    }
}

var myObject = MyClass()
myObject.myData.count