返回实体中的随机属性(核心数据)
Posted
技术标签:
【中文标题】返回实体中的随机属性(核心数据)【英文标题】:Return random attribute in entity (Core Data) 【发布时间】:2017-08-06 19:08:17 【问题描述】: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)和所需的时态(到tensileLabel.text)来测试用户的变位。目标是让用户输入(到 userInput.text)那个动词的共轭形式,然后按下一个按钮(checkAnswer)来检查他们的答案。如果答案正确,则会生成一个新的动词,等等。
我有一个名为 verbDatabase
的 CoreData 实体,其属性名为 id
、infinitive
、indPreJe
和 indPreTu
。
我已经设法生成了一个随机行(以显示一个随机动词),但我无法生成一个随机属性(indPreJe 或 indPreTu)。要生成随机属性并且因为属性名称必须以小写字母开头,我不能使用与生成随机行相同的方法。
为了解决这个问题,我尝试创建一个包含属性名称的数组,然后生成一个随机数,然后将属性名称附加到紧张标签.text 中显示的获取请求中,但紧张标签文本显示字符串 "verbDatabase[0].indPreJe"
而不是verbDatabase[0].indPreJe
的值。
有没有办法让文本标签在附加随机属性名称而不是字符串指向该值后显示该值?
如果我以低效的方式处理我的数据,是否有更好的方法将我的数据存储到 Core Data 中,让我能够更好地使用我正在尝试做的事情来访问它?我仍在尝试围绕核心数据结构。我还考虑将动词保存为单独的字典,时态作为键,共轭形式作为对应的值。
理想情况下,我希望能够允许用户选择他们想要测试的时态,并对动词进行分类 - 常规形式、不规则形式、常用动词等。
提前感谢您的帮助!
@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
【问题讨论】:
【参考方案1】:有没有办法让文本标签在附加随机属性名称而不是字符串指向该值后显示该值?
是的,你可以使用value(forKey:)
(见the documentation here):
var columnName = columnNames[currentColumn]
tenseLabel.text = verbDatabase[currentRow].value(forKey:columnName)
【讨论】:
非常感谢!我开始担心我必须重新格式化我的数据!为了完整起见,Swift 让我添加了as! String
: tenseLabel.text = verbDatabase[currentRow].value(forKey:columnName) as! String
以上是关于返回实体中的随机属性(核心数据)的主要内容,如果未能解决你的问题,请参考以下文章