Ios 如何将字典从一个视图控制器类传递到另一个视图控制器类?SWIFT

Ios 如何将字典从一个视图控制器类传递到另一个视图控制器类?SWIFT,ios,swift,xcode,dictionary,Ios,Swift,Xcode,Dictionary,我试图在一个视图控制器中列出用户及其密码,将该信息保存在字典中,并将该字典发送给另一个视图控制器,该视图控制器要求用户输入用户名/密码组合以授权登录。(密钥是用户名,值是密码)。有没有办法把字典从SecondVC发送到FirstVC First View Controller class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var Username: UITextField!

我试图在一个视图控制器中列出用户及其密码,将该信息保存在字典中,并将该字典发送给另一个视图控制器,该视图控制器要求用户输入用户名/密码组合以授权登录。(密钥是用户名,值是密码)。有没有办法把字典从SecondVC发送到FirstVC

First View Controller

class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var Username: UITextField!
    
    @IBOutlet weak var Verification: UILabel!
    @IBOutlet weak var Password: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        Username.delegate = self
        Password.delegate = self

    }
    
    var usersDict = [String : String]()
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let des = segue.destination as? AccountViewController {
            des.usersDict = usersDict
        }
    }
    


    @IBAction func Authorization(_ sender: Any) { 
        for ( key , value ) in usersDict{
            let v = key.count
            var start = 0
            if start <= v{
                if Username.text == key{
                    if Password.text == value{
                        Verification.text = "Looks Good"
                    }
                }
                else{
                    start += 1
                }
            }
            else{
                Verification.text = "Yikes"
            }
            
            
        }
        


    }
    
}


我已经在那里制作了字典,但它只会在开始时发送,并且在创建原始帐户后不会更新。(它正在发送的字典是空的)

使用一个序列将此方法添加到
ViewController

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let des = segue.destination as? AccountViewController {
        des.usersDict = yourDicHere
    }
}

这里有一个使控制器使用它创建的某个对象的数据的通用模式,在本例中是第二个控制器

试着将它应用到你的情况中,如果你遇到问题,请告诉我

protocol Processor {
    func process(_ dict: [String : String])
}

class FirstController: UIViewController, Processor {
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let controller = segue.destination as? SecondController {
            controller.delegate = self
        } else {
            print("Unexpected view controller \(segue.destination)")
        }
    }
    
    func process(_ dict: [String : String]) {
    }
}

class SecondController: UIViewController {
    var delegate: Processor?
    
    func someWork() {
        if let processor = delegate {
            processor.process(["Name" : "Pwd"])
        } else {
            print("Delegate not assigned")
        }
    }
}

分享你的代码和你的尝试,所以有很多不同的方法可以做到这一点。使用哪一个取决于您从SecondVC链接到FirstVC的方式。发布将用户从first view controller链接到second view controller的代码。您有segue吗?我没有使用任何代码,我使用的是从一个到下一个以及使用按钮和拖动来回的转换。非常感谢您提供此代码。为了澄清,当你在这里写你的词典时,我必须在ViewController中创建一个新词典,对吗?也许我误解了这个问题,但字典不是应该朝着另一个方向发展吗?@PhillipMills op在每个vc上面写了第一个和第二个
usersDict
是第二个vc中的占位符。因为他是在第二个vc中创建字典的,我想他想把它发回给第一个进行授权。也许不是@PhillipMills是的,我误解了Shu Khan建议使用的代码。现在我回到了我的代码,但它并没有发回(我认为代码就是这样做的)。使用Khan的代码,我可以发送它,但是添加另一个帐户后更新的字典没有发送。有没有一种方法可以让我发送更新后的词典,而不仅仅是在开始时发送,因为如果我在开始时发送,它是空的。我很抱歉问了一些简单的问题,但是我应该在哪里添加此代码(视图控制器、应用程序代理等)?另外,我是否只将(_dict:[String:String])替换为usersDict,或者是否有更多的地方需要使用不同的变量。这不是复制/粘贴,而是类之间如何交互的模式。如果你试图理解它在做什么,并将逻辑应用到你拥有的东西上,这可能是最好的。在我的理解中,处理器协议定义了字典,在第二个控制器的代码中,我看到func someWork正在协议处理器中访问func进程。在processor中调用协议中的字典后,如何再次引用它(添加新用户名和密码)?在IBAction中,我试图引用字典Processor.process[CreateUsername.text!]=CreatePassword.text!但是,若要添加新条目,它会发送一个错误,提示“类型的值”(Processor)->(String:String])->()“没有下标”。非常感谢您的帮助。我已将代码更改为Processor.process([CreateUsername.text!:CreatePassword.text!))它不会抛出任何错误消息。我仍然需要帮助,了解如何在FirstViewController中为for-in循环引用字典(for-in循环是授权用户并允许他们使用应用程序).我理解您给我的模板的方式是使用协议将字典从第二个视图控制器发送到第一个视图控制器?我的理解正确吗?
protocol Processor {
    func process(_ dict: [String : String])
}

class FirstController: UIViewController, Processor {
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let controller = segue.destination as? SecondController {
            controller.delegate = self
        } else {
            print("Unexpected view controller \(segue.destination)")
        }
    }
    
    func process(_ dict: [String : String]) {
    }
}

class SecondController: UIViewController {
    var delegate: Processor?
    
    func someWork() {
        if let processor = delegate {
            processor.process(["Name" : "Pwd"])
        } else {
            print("Delegate not assigned")
        }
    }
}