2015-02-07 109 views
0

嘿,当我宣布并创建一个我的班级数组时,我得到了问题。如何在swift中实例化一个类的数组?

我声明如下

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

我不确定你为什么看到你遇到的问题。我拿了代码,并将其粘贴到一个操场上运行,它运行良好。我正在粘贴以下代码的稍微修改版本。我唯一的变化是声明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和“3”,这是我所期望的。

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的好处是它完全明了你的意图是什么 - 将输入转换为新的数组。

这样做的另一个好处是,您现在可以声明_mScoringDatalet而不是var,如果事实证明,一旦它第一次创建,您就不需要更改它。

P.S.在ScoringData的所有成员变量之后,您可能不需要那些!。那些正在创建隐含的解包选项,并且只在非常特定的情况下才需要。当他们需要时,你可能会在别处看到它们,但是你不需要在每个成员变量上复制它们。

相关问题