swift - 在用户输入的另一个键中创建一个包含键和值的字典

标签 swift xcode dictionary

所以我们的想法是用户可以创建包含多对单词的集合。

例如,他们创建了一个集合nouns,并在其中添加了一些单词和单词的翻译。然后他们创建了另一个名为 colors 的集合并添加了相应的键和值等等:

userInput = {
    nouns: {
        "dog": "translation",
        "cat": "translation",
        "fish": "translation"
         //etc
    },
    colors: {
        "red": "translation",
        "green": "translation",
        "blue": "translation"
        //etc
    }
    //etc..
}

我如何在 Swift 中实现它?

这是否意味着每次用户添加新集合时我都必须创建新词典?

我试过做类似的事情

var dict = [String: AnyObject]()
var collectionNanme = input.text
dict[collectionNanme] = [Dictionary<String, String>]() as AnyObject

dict[collectionNanme].append([word1.text: word2.text])

可是错误数不清!执行此操作的正确方法是什么?

更新:

import UIKit
var main = [String: [String:String]]()

class ViewController: UIViewController {

    @IBOutlet weak var collection: UITextField!
    @IBOutlet weak var input1: UITextField!
    @IBOutlet weak var input2: UITextField!

    var collectionName = collection.text!
    var inner:[String:String] = main[collectionName] ?? [:]

    inner[input1.text!] = input2.text!
    main[collectionName] = inner

    @IBAction func click(_ sender: Any) {
        print(main[collectionName])
    }
}

最佳答案

你需要

var main = [String: [String:String]]()

获取当前值

var collectionName = input.text! // nouns / colors
var inner:[String:String] = main[collectionName] ?? [:] 

改变与挫折

inner["dog"] = "translation"
main[collectionName] = inner

import UIKit

var main = [String: [String:String]]()  // global
class ViewController: UIViewController {

    @IBOutlet weak var collection: UITextField!
    @IBOutlet weak var input1: UITextField!
    @IBOutlet weak var input2: UITextField! 


    var collectionName = "nouns"

    override func viewDidLoad() {
        super.viewDidLoad()

        var collectionName = collection.text! // collection.text! will be "" as textfield is empty when the above function is called 
        var inner:[String:String] = main[collectionName] ?? [:] 
        inner[input1.text!] = input2.text!
        main[collectionName] = inner

    }

    @IBAction func click(_ sender: Any) {
        print(main[collectionName])
    }
}

import UIKit

var main = [String: [String:String]]()  // global
class ViewController: UIViewController {

    @IBOutlet weak var collection: UITextField!
    @IBOutlet weak var input1: UITextField!
    @IBOutlet weak var input2: UITextField! 


    var collectionName = "nouns"

    override func viewDidLoad() {
        super.viewDidLoad()



    }

    @IBAction func save(_ sender: Any) { // save button action
        print("Before save : " , main)

        var collectionName = collection.text!  
        var inner:[String:String] = main[collectionName] ?? [:] 
        inner[input1.text!] = input2.text!
        main[collectionName] = inner

       print("After save : " , main)    
    }

}

关于swift - 在用户输入的另一个键中创建一个包含键和值的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55329805/

相关文章:

ios - 当键盘快速出现时向上滚动 UITableView

swift - 如何从一个 View Controller 向另一个 View Controller 发送和接收 UISlider 值

ios - 每次打开项目时 Xcode 都会意外退出

python - python中字典的效率 :

python - 尝试用更大的字典更新字典

ios - 尽管没有在 tableview 中实现拖尾滑动操作,但删除按钮会自动在滑动时实现

Swift 项目在 Facebook 登录后无法正确继续

xcode - 恢复到以前的版本 git repo

objective-c - 创建一个带有核心情节的发行版本?

python - 在 Python 中散列一个不可变的字典