无法访问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