嘿,当我声明并创建我的类的数组时,我遇到了问题。
我声明了一个这样的数组
var _mScoringData = [ScoringData]()
这是“ScoringData”类
class ScoringData{
let num : Int!
let question : String!
var yes : Bool!
var no : Bool!
init(num:Int,question:String){
self.num = num
self.question = question
self.no = false
self.yes = false
}
}
我创建了一个函数来创建实例数组,以下代码是该函数的实现
func createScoringDatas(){
for var index = 0; index < scoreDataCount; ++index{
_mScoringData.append(ScoringData(num:index,question: _mQuestionData.Questions[index]))
}
}
构建很好,但是没有创建数组,并且当我调试时,堆上没有任何内容。 我想知道如何解决这个问题。
谢谢。
最佳答案
如果没有完整的代码,就不可能判断,但原因很可能是因为您的变量 scoreDataCount
为零。如果我获取您的代码,并确保 scoreDataCount
非零,则它可以正常工作。
scoreDataCount
只是 _mQuestionData.Questions
中问题数量的计数吗?如果是这样,您可能需要考虑以下 C 风格 for
和数组下标的替代方案:
for (index, question) in enumerate(_mQuestionData.Questions) {
_mScoringData.append(ScoringData(num: index, question: question))
}
enumerate(someSequence)
接受一个序列(例如数组),并创建一个新的对序列、从零开始的索引以及序列的元素。然后,您可以使用 for...in
对其进行循环,这可以看起来更干净,并有助于避免错误(就像您遇到的错误)。
一旦理解了这一点,就可以完全废弃 for
循环并将其替换为 map
:
_mScoringData = map(enumerate(_mQuestionData.Questions)) {
index, question in
ScoringData(num: index, question: question)
}
请注意,这会创建一个 map ,而不是附加到现有 map ,因此您可能不再需要初始创建行。
每当您有一系列事物,并且想要转换每个元素并将其放入数组中时,map
就是一种情况。您可能会说 for...in
更清晰(特别是如果您不习惯查看 map
),但 map
的好处是它使您的意图完全显而易见 - 将输入转换为新数组。
这样做的另一个好处是,如果事实证明您永远不需要更改,您现在可以使用 let
而不是 var
声明 _mScoringData
一旦它第一次创建它。
附注在 ScoringData
中的所有成员变量之后,您可能不需要那些 !
。这些正在创建隐式展开的选项,并且仅在非常特定的情况下才需要。有时,当需要它们时,您可能会在其他地方看到它们,但您不需要将其复制到每个成员变量上。
关于arrays - 如何在 swift 中实例化一个 Array 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28382214/