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
名爲id
,infinitive
,indPreJe
和indPreTu
屬性的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
}
太謝謝你了!我開始擔心我必須重新格式化數據! 爲了完整起見,Swift讓我加了 'as! String': 'tenseLabel.text = verbDatabase [currentRow] .value(forKey:columnName)as! String' – shortStack