嘿,当我宣布并创建了一个班级数组时,我遇到了问题。
我声明了一个像这样的数组
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]))
}
}
构建很好,但是数组没有创建,当我调试时,堆上没有任何内容。 我想知道如何解决这个问题。
感谢。
答案 0 :(得分:1)
没有完整的代码就无法判断,但原因很可能是因为你的变量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
就是这种情况。您可以争辩for…in
更清楚(特别是如果您不习惯看map
)但map
的好处是它使您的意图完全明显 - 转换输入到新数组中。
这样做的另一个好处是,如果事实证明您在第一次创建后永远不需要更改它,现在可以使用_mScoringData
而不是let
声明var
。
P.S。在!
中的所有成员变量之后,您可能不需要那些ScoringData
。这些是创建隐式解包的选项,并且仅在非常特定的情况下才需要。您可能会在需要时在其他地方看到它们,但您不需要在每个成员变量上复制它。
答案 1 :(得分:0)
我不确定你为什么会看到你遇到的问题。我拿了代码并将其粘贴到游乐场中运行它并且工作正常。我正在粘贴下面代码的略微修改版本。我唯一的变化是声明scoreDataCount值并将问题的来源更改为字符串数组。
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
}
}
let scoreDataCount = 5
var _mScoringData = [ScoringData]()
let questions = ["One", "two", "three", "four", "five" ]
func createScoringDatas() {
for var index = 0; index < scoreDataCount; ++index{
_mScoringData.append(ScoringData(num:index,question: questions[index]))
}
}
createScoringDatas()
print(_mScoringData.count)
print(_mScoringData[2].question)
最后2个打印语句输出5和&#34;三个&#34;分别是我所期望的。