gpt4 book ai didi

swift - 无法在 Swift 中访问多维数组

转载 作者:可可西里 更新时间:2023-11-01 00:53:54 25 4
gpt4 key购买 nike

我创建了一个多维数组,但当我尝试在 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
}
}

enter image description here

编辑:

我将 KeyLabelType 声明为

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

编辑:我向 Apple (17340589) 提交了错误报告

最佳答案

这是一个错误,请在 bugreport.apple.com 报告.这与在 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

如果您可以重写您的代码以一直使用 NSObject 子类,它也可以作为一种解决方法

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

关于swift - 无法在 Swift 中访问多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24242655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com