2015-02-07 62 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的所有成員變量之後,您可能不需要那些!。那些正在創建隱含的解包選項,並且只在非常特定的情況下才需要。當他們需要時,你可能會在別處看到它們,但是你不需要在每個成員變量上覆制它們。

相關問題