gpt4 book ai didi

swift - 如何将数组值从 ViewController 的协议(protocol)传递到另一个 ViewController

转载 作者:行者123 更新时间:2023-11-30 12:02:36 24 4
gpt4 key购买 nike

解释我想要做什么:

  • 我想创建一个 let params : [String: AnyObject] 数组/Dic 来保存[ name: nameTextField.text, pass : passTextField.text, 等等...]合二为一ViewController 名为“SignUpVC”
  • 也在“SignUpVC”中,我想要一个协议(protocol)来保存我的值params 并“保存”它们以供以后在其他 ViewController 中使用。不使用 NSUserDefaults。

  • 现在,这些参数已被保存并分配给协议(protocol)函数的参数,我想进入另一个名为的 ViewController“SchoolSelectionVC”并调出这些值并分配paramsvar newParams : [String : AnyObject] 因此它们等于相同的东西,但无法更改某些值,如果我想...

基本上,我尝试使用 SignUpVC 中的用户输入分配一些值,保存这些值,并将它们传递到另一个 ViewController 中的另一个变量以供进一步使用或更改。

问题:

下面是我的代码,它显示我正在创建一个SignUpVC协议(protocol),一个名为“var signupDelegate = SignUpVCProtocol”的委托(delegate),一个let param,为其赋值,尝试将 let param 分配给 SignUpVC 协议(protocol)参数,然后移至另一个 ViewController(“SchoolSelectionVC”) ),但错误在那里停止了。这一切都发生在 SignUpVC 内的按钮单击操作内。

我只是想知道为什么当我尝试向它传递参数时,保存 SignUpVCProtocol 的委托(delegate)变量及其函数会给出错误。

如果有关于如何将值从一个 VC 保存到另一个 VC 的任何提示,请告诉我,如果我的任何代码需要更多解释,也请告诉我!

代码:

    protocol SignUpVCProtocol {
func logInData(params : [String : AnyObject])
}

class SignUpVC: UIViewController{

//MARK:- @IBOutlet
//MARK: ^^^^^^^^^^^^^^^^^^^^

@IBOutlet var signUpWithFacebookButton: UIButton!
//MARK:- Properties
//MARK: ^^^^^^^^^^^^^^^^^^^^
var selectedTextField : UITextField!
var keyboardPresent = false
var loginFlag = false
var fbId: String!
var picUrl: String!
var schoolID : String = ""
var schoolDict : [String:AnyObject]!
var player: AVPlayer?
var fbData : AnyObject!
let domainLbl = UILabel()

var signUpDelegate : SignUpVCProtocol! //Delegate var for Protocol

按钮操作内部:

    let params = [
"Action" : "signUp" as AnyObject,
"name" : self.nameTextField.text! as AnyObject,
"email" : "\(self.emailTextField.text!)" as AnyObject,
"password" : self.passwordTextField.text! as AnyObject,
"school" : self.schoolTextField.text! as AnyObject,
"device_token" : sharedAppdelegate.DeviceToken as AnyObject,
"device_type" : "iphone" as AnyObject,
"school_id" : self.schoolID as AnyObject
]
self.signUpDelegate.logInData(params: params) //!!Where i want to assign the above params to the protocol params for use in SchoolSelectionVC
//ERROR HAPPENS RIGHT ABOVE^^
let schoolVC = self.storyboard?.instantiateViewController(withIdentifier: "SchoolSelectionVC") as! SchoolSelectionVC
let navVC = UINavigationController(rootViewController: schoolVC)
navVC.isNavigationBarHidden = true
schoolVC.delegate = self
self.present(navVC, animated: true, completion: nil)

//in another VC Class
extension SchoolSelectionVC: SignUpVCProtocol
{
func logInData(params: [String : AnyObject]) {
self.newParams = params as! [String : String]
}
}

最佳答案

不要使用协议(protocol)在 viewController 之间传递数据,使用

func prepare(for segue: UIStoryboardSegue, sender: Any?)

相反。

检查这个答案: Passing object with prepareForSegue Swift

对于需要以编程方式加载的 viewController,您可以使用此传递数据的示例:

//For using without navigation controller
let vc = SomeViewController(nibName: "SomeViewController", bundle: nil);
vc.someVariable = someData
self.present(vc, animated: true, completion: nil)

//For using with navigation controller
let vc = SomeViewController(nibName: "SoveViewController", bundle: nil);
vc.someVariable = someData
self.navigationController?.pushViewController(vc, animated: true)

关于swift - 如何将数组值从 ViewController 的协议(protocol)传递到另一个 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47026737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com