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