2017-08-06 101 views
2

verbDatabase Table 我使用的數據是下方,也可在上面的截圖:返回隨機屬性的實體(核心數據)

+----+------------+------------+------------+ 
| id | infinitive | ind pre je | ind pre tu | 
+----+------------+------------+------------+ 
| 1 | aimer  | aime  | aimes  | 
| 2 | aller  | vais  | vas  | 
| 3 | courir  | cours  | cours  | 
| 4 | servir  | sers  | sers  | 
| 5 | mourir  | meurs  | meurs  | 
| 6 | dormir  | dors  | dors  | 
| 7 | sentir  | sens  | sens  | 
| 8 | vêtir  | vêts  | vêts  | 
| 9 | fuir  | fuis  | fuis  | 
| 10 | tenir  | tiens  | tiens  | 
+----+------------+------------+------------+ 

我是新來的編碼和我工作的一名法國共軛通過以不定式形式(對verbLabel.text)和所需的時態(對tenseLabel.text)顯示動詞來測試用戶對它們的結合的應用程序。目標是讓用戶輸入(到userInput.text)該動詞的共軛形式並按下按鈕(checkAnswer)來檢查他們的答案。如果答案是正確的,一個動詞,將會產生等

我有一個名爲verbDatabase名爲idinfinitiveindPreJeindPreTu屬性的CoreData實體。

我設法生成一個隨機行(顯示一個隨機動詞),但我無法生成隨機屬性(indPreJe或indPreTu)。要生成一個隨機屬性,並且由於屬性名稱必須以小寫字母開頭,我不能使用與我一樣的方法生成隨機行。

爲了解決這個問題,我嘗試創建一個包含屬性名稱的數組,然後生成一個隨機數字,然後將屬性名稱附加到在tenseLabel.text中顯示的獲取請求中,但tenseLabel.text顯示字符串"verbDatabase[0].indPreJe"的值爲verbDatabase[0].indPreJe

有沒有什麼辦法讓文本標​​籤顯示值後附加了隨機屬性名稱而不是字符串指向該值?

如果我以低效的方式處理數據,有沒有更好的方法將數據存儲到核心數據中,這將使我能夠更好地訪問我想要做的事情?我仍然試圖圍繞核心數據結構進行研究。我還考慮將動詞作爲單獨的詞典與時態一起保存,作爲它們的鍵和共軛形式作爲其相應的值。

我非常希望能夠允許用戶選擇其時態,他們希望能夠在和測試也分類動詞 - 規則形式,不規則的形式,常用動詞等

預先感謝任何幫助!

@IBOutlet weak var verbLabel: UILabel! 
@IBOutlet weak var tenseLabel: UILabel! 
@IBOutlet weak var userInput: UITextField! 
@IBOutlet weak var textView: UITextView! 
var currentRow: Int = 0 
var countTenseColumns: Int = 2 
var currentColumn: Int = 0 
var columnNames = ["id","infinitive","indPreJe","indPreTu"] 

@IBAction func checkAnswer(_ sender: Any) { 

    if userInput.text == verbDatabase[currentRow].indPreTu { 
     textView.text = "correct!" 
     viewWillLayoutSubviews() 
     userInput.text = nil 
    } 

    else { 
    textView.text = "the correct answer is \(verbDatabase[currentRow].indPreTu ?? "error")" 

    } 
} 

func randomNumberGeneratorRow() -> Int { 
    //generates random number from 1 to verbDatabase.count 
    return Int(arc4random_uniform(UInt32(verbDatabase.count)+1)) 
} 

func randomNumberGeneratorColumn() -> Int { 
    //generates random number from 2 to number of columns with tenses 
    return Int(arc4random_uniform(UInt32(countTenseColumns)+2)) 
} 

override func viewWillLayoutSubviews() { 
    currentRow = self.randomNumberGeneratorRow() 
    currentColumn = self.randomNumberGeneratorColumn() 
    var columnName = "verbDatabase[0].\(columnNames[currentColumn])" 

    verbLabel.text = verbDatabase[currentRow].infinitive 
    tenseLabel.text = columnName  
} 

回答

0

有沒有什麼辦法讓文字標籤已附有隨機屬性的名稱,而不是字符串指向值後顯示值?

是的,你可以使用value(forKey:)(見the documentation here):

var columnName = columnNames[currentColumn] 
tenseLabel.text = verbDatabase[currentRow].value(forKey:columnName) 
+0

太謝謝你了!我開始擔心我必須重新格式化數據! 爲了完整起見,Swift讓我加了 'as! String': 'tenseLabel.text = verbDatabase [currentRow] .value(forKey:columnName)as! String' – shortStack

相關問題