我的项目中有两个场景。在第一个中,用户输入两个值,然后将这些值添加到以words
作为键并将input1
作为值的字典input2
中:
var words = [String: String]()
class ViewController: UIViewController {
@IBOutlet weak var input: UITextField!
@IBOutlet weak var input2: UITextField!
@IBAction func add(_ sender: UIButton) {
if (input.text != "") {
words = [input.text: input2.text] as! [String : String]
}
}
在第二个中,我要使之成为上一个场景中添加的所有值对,并在单击按钮时将它们一对一地显示在两个标签上。
到目前为止,我只有这个:
class ViewController2: UIViewController {
@IBOutlet var word1: UILabel!
@IBOutlet var word2: UILabel!
override func viewDidAppear(_ animated: Bool) {
for data in words{
let key1 = data.key
let value1 = data.value
word1.text = key1
word2.text = value1
}
}
}
它仅在屏幕加载时显示添加的单词的最后一个值...
还有一个问题,我用来保存用户输入值的方法是否正确?它实际上是一个接一个地添加新值,还是只重写第一个添加的新值?
答案 0 :(得分:1)
使用单词数组将单词的每个输入保存为字典数组。然后只有您才能显示Scene2上的所有项目
ValueError: could not convert string to float: '.0 .0 .3 .7 .2 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 .0 '
这里不要将值保存为单词。
在单词中插入一个值
var words = [[String: String]]()
然后将单词传递到下一个场景。 按以下格式显示每个键和值
let value = ["key":"value"]
words.append(value)
答案 1 :(得分:1)
您快完成了。让我对您的代码进行一些更改。
第一,替换
var words = [String: String]()
与
var words = [Dictionary<String, String>]()
第二,替换您的“添加”按钮功能-
@IBAction func add(_ sender: UIButton) {
if (input.text != "") {
words.append([input.text: input2.text] as! [String : String])
input.text = ""
input2.text = ""
}
}
第三,将此行添加到您的secondViewContoller
-
var wordIndex = 0
第四,在viewDidAppear
中删除代码,然后添加以下行-
showValue()
现在定义此方法
private func showValue(){
if wordIndex < words.count {
if let word = words[wordIndex] as? Dictionary<String, String> {
word1.text = word.keys.first
word2.text = word.values.first
}
}else{
debugPrint("No more words!")
}
}
现在,是时候添加“下一步”按钮动作来查看下一个单词了,我们开始-
@IBAction func btnActionNext(_ sender: UIButton) {
wordIndex += 1
showValue()
}
我们现在完成了。:)
让我知道您是否仍然有任何问题。