Swift 如何在一个发送方中发送多个变量?

Swift 如何在一个发送方中发送多个变量?,swift,variables,uibutton,sender,Swift,Variables,Uibutton,Sender,我试图在一个发送器中发送多个变量,以便在Viewcontroller中显示它已连接到名为menuENG的序列。我有五个按钮,每个按钮应该发送不同的信息,因为它是一个字典,每个按钮是一个单词。但我想通过一个发送者来做这件事。我尝试了下面的代码,但它不工作 p、 s:我试着制作一个数组,但是Xcode变得疯狂了 @IBAction func abstractionENG(sender:UIButton) { return perfomanceWithIdentifier("menuENG",se

我试图在一个发送器中发送多个变量,以便在Viewcontroller中显示它已连接到名为
menuENG
的序列。我有五个按钮,每个按钮应该发送不同的信息,因为它是一个字典,每个按钮是一个单词。但我想通过一个发送者来做这件事。我尝试了下面的代码,但它不工作

p、 s:我试着制作一个数组,但是Xcode变得疯狂了

@IBAction func abstractionENG(sender:UIButton) {
  return perfomanceWithIdentifier("menuENG",sender:nil)
}

我想您可以发送字典,但这一行有问题
return performancewithidentifier(“menuENG”,发件人:nil)

无论如何,您可以分别识别标签所单击的按钮,并根据单击的按钮创建字典。现在,您可以将完整的字典发送给发件人

@IBAction func abstractionENG(sender:UIButton) {

        var dictSendData:[String:Any] = [:]
        if sender == btn1
        {
            dictSendData.updateValue("abc", forKey: "key1")
            dictSendData.updateValue("pqr", forKey: "key2")
        }
        else if sender == btn2
        {
            dictSendData.updateValue("xyz", forKey: "key1")
            dictSendData.updateValue("123", forKey: "key2")

        }
       else 
        {
           dictSendData.updateValue("123", forKey: "key1")
           dictSendData.updateValue("abc", forKey: "key2")
        }
 self.performSegue(withIdentifier:"menuENG", sender: dictSendData)

}

1-将segue操作分配给iAction功能-将标签id分配给ever按钮

您已经实现了它

2-您的
iAction
函数应该运行另一个函数来运行
performsgue函数

例如:

self.performSegue(withIdentifier: "openAnotherViewController",sender: sender)
3-转到目标视图控制器并创建接收器变量“也许您可以使用选项”

3-转到源代码视图控制器并传递变量

     // MARK: - Navigation
 // In a storyboard-based application, you will often want to do a little preparation before navigation
 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
 // Get the new view controller using segue.destinationViewController.
 // Pass the selected variable/object to the new view controller .

    if segue.identifier == "openAnotherViewController" {
        let destinationController =  segue.destination as! OtherViewControllerClass Name 
       // identify button by tag number 
       if (sender as! UIButton).tag == 200 {
        destinationController.receiverInt = self.sourceInt

        }else{
        destinationController.receiverInt2 = self.sourceInt2}

    }


 }

感谢大家通过这种方式帮助解决问题>

class MainViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

/* The following functions containts a group of conditionals which will change the scene depending  of the IBAction selected */

@IBAction func abstractionENG(sender: UIButton) {
    let data = [DiccioModel.abstraction().nameEng,DiccioModel.abstraction().descriptionEng,DiccioModel.abstraction().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}

@IBAction func webBrowserENG(sender: UIButton) {
    let data = [DiccioModel.webBrowser().nameEng,DiccioModel.webBrowser().descriptionEng,DiccioModel.webBrowser().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}

@IBAction func latencyENG(sender: UIButton) {
    let data = [DiccioModel.latency().nameEng,DiccioModel.latency().descriptionEng,DiccioModel.latency().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}

@IBAction func conditionalENG(sender: UIButton) {
    let data = [DiccioModel.conditional().nameEng,DiccioModel.conditional().descriptionEng,DiccioModel.conditional().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}


@IBAction func operatingSystemENG(sender: UIButton) {
    let data = [DiccioModel.os().nameEng,DiccioModel.os().descriptionEng,DiccioModel.os().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}

@IBAction func abstractionESP(sender: UIButton) {
    let data = [DiccioModel.abstraction().nameEsp,DiccioModel.abstraction().descriptionEsp,DiccioModel.abstraction().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}

@IBAction func webBrowserESP(sender: UIButton) {
    let data = [DiccioModel.webBrowser().nameEsp,DiccioModel.webBrowser().descriptionEsp,DiccioModel.webBrowser().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}

@IBAction func latencyESP(sender: UIButton) {
    let data = [DiccioModel.latency().nameEsp,DiccioModel.latency().descriptionEsp,DiccioModel.latency().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}

@IBAction func conditionalESP(sender: UIButton) {
    let data = [DiccioModel.conditional().nameEsp,DiccioModel.conditional().descriptionEsp,DiccioModel.conditional().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}


@IBAction func operatingSystemESP(sender: UIButton) {
    let data = [DiccioModel.os().nameEsp,DiccioModel.os().descriptionEsp,DiccioModel.os().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "menuENG") || (segue.identifier == "menuESP"){
        if let destinationViewController = segue.destinationViewController as? DefinitionViewController{
            if let data = sender as? Array<String>{
                destinationViewController.tittle = data[0]
                destinationViewController.def = data[1]
                destinationViewController.link = data[2]
            }
        }
    }



}
class MainViewController:UIViewController{
重写func viewDidLoad(){
super.viewDidLoad()
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
}
/*以下函数包含一组条件,这些条件将根据选定的iAction更改场景*/
@iAction func Abstractionng(发件人:UIButton){
让数据=[DiccioModel.abstraction().nameEng,DiccioModel.abstraction().descriptioning,DiccioModel.abstraction().linking]
performsguewithidentifier(“菜单”,发送方:数据)
}
@iAction func WebBrowsering(发件人:UIButton){
让数据=[DicIOModel.webBrowser().nameEng,DicIOModel.webBrowser().Descriptioning,DicIOModel.webBrowser().Linking]
performsguewithidentifier(“菜单”,发送方:数据)
}
@iAction func latencyENG(发件人:UIButton){
let data=[DiccioModel.latency().nameEng,DiccioModel.latency().descriptioning,DiccioModel.latency().linking]
performsguewithidentifier(“菜单”,发送方:数据)
}
@iAction func conditionalENG(发件人:UIButton){
let data=[DiccioModel.conditional().nameEng,DiccioModel.conditional().descriptioning,DiccioModel.conditional().linking]
performsguewithidentifier(“菜单”,发送方:数据)
}
@iAction func操作系统(发送方:UIButton){
让数据=[DiccioModel.os().nameEng,DiccioModel.os().descriptioning,DiccioModel.os().linking]
performsguewithidentifier(“菜单”,发送方:数据)
}
@iAction func abstractionESP(发件人:UIButton){
让数据=[DiccioModel.abstraction().nameEsp,DiccioModel.abstraction().descriptionEsp,DiccioModel.abstraction().linkEsp]
performsguewithidentifier(“menuESP”,发送方:数据)
}
@iAction func webBrowserESP(发件人:UIButton){
让数据=[DicIOModel.webBrowser().nameEsp,DicIOModel.webBrowser().descriptionEsp,DicIOModel.webBrowser().linkEsp]
performsguewithidentifier(“menuESP”,发送方:数据)
}
@iAction func latencyESP(发送方:UIButton){
let data=[DiccioModel.latency().nameEsp,DiccioModel.latency().descriptionEsp,DiccioModel.latency().linkEsp]
performsguewithidentifier(“menuESP”,发送方:数据)
}
@iAction func ConditionalSP(发送方:UIButton){
让数据=[DicIOModel.conditional().nameEsp,DicIOModel.conditional().descriptionEsp,DicIOModel.conditional().linkEsp]
performsguewithidentifier(“menuESP”,发送方:数据)
}
@iAction func operatingSystemESP(发送方:UIButton){
让数据=[DiccioModel.os().nameEsp,DiccioModel.os().descriptionEsp,DiccioModel.os().linkEsp]
performsguewithidentifier(“menuESP”,发送方:数据)
}
覆盖函数prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject?){
if(segue.identifier==“menuENG”)| |(segue.identifier==“menuESP”){
如果让destinationViewController=segue.destinationViewController为?定义ViewController{
如果let data=sender as?数组{
destinationViewController.title=数据[0]
destinationViewController.def=数据[1]
destinationViewController.link=数据[2]
}
}
}
}
注:此代码连接到定义视图控制器(视图控制器)和模型(项目由M.V.C way制作)


再次感谢大家的帮助。希望代码将来能帮助其他人。

你不能在iAction函数中返回。你的意思是所有五个按钮都连接到abstractionENG函数?你真正想要什么?你能解释一下吗。标记是邪恶的。直接比较
发送者
,例如
如果发送者==button1
更好。或者decla为每个按钮设置一个特殊的函数。不要推荐标签。它们只是一个神奇的数字。@Sulthan我认为当我们没有准确地创建所有按钮的出口时,标签是有用的,例如,标签属性可以称为“lazyHackUsedHere”这是完全正确的。它们只是糟糕的代码。我想你忘了阅读
按钮应该会发送不同的信息,因为它是一本字典,每个按钮都是一个单词
。我已经更新了我的答案,告诉他如何使用标签。他不知道如何使用segue这就是我发布示例的原因
class MainViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

/* The following functions containts a group of conditionals which will change the scene depending  of the IBAction selected */

@IBAction func abstractionENG(sender: UIButton) {
    let data = [DiccioModel.abstraction().nameEng,DiccioModel.abstraction().descriptionEng,DiccioModel.abstraction().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}

@IBAction func webBrowserENG(sender: UIButton) {
    let data = [DiccioModel.webBrowser().nameEng,DiccioModel.webBrowser().descriptionEng,DiccioModel.webBrowser().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}

@IBAction func latencyENG(sender: UIButton) {
    let data = [DiccioModel.latency().nameEng,DiccioModel.latency().descriptionEng,DiccioModel.latency().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}

@IBAction func conditionalENG(sender: UIButton) {
    let data = [DiccioModel.conditional().nameEng,DiccioModel.conditional().descriptionEng,DiccioModel.conditional().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}


@IBAction func operatingSystemENG(sender: UIButton) {
    let data = [DiccioModel.os().nameEng,DiccioModel.os().descriptionEng,DiccioModel.os().linkEng]
    performSegueWithIdentifier("menuENG", sender: data)
}

@IBAction func abstractionESP(sender: UIButton) {
    let data = [DiccioModel.abstraction().nameEsp,DiccioModel.abstraction().descriptionEsp,DiccioModel.abstraction().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}

@IBAction func webBrowserESP(sender: UIButton) {
    let data = [DiccioModel.webBrowser().nameEsp,DiccioModel.webBrowser().descriptionEsp,DiccioModel.webBrowser().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}

@IBAction func latencyESP(sender: UIButton) {
    let data = [DiccioModel.latency().nameEsp,DiccioModel.latency().descriptionEsp,DiccioModel.latency().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}

@IBAction func conditionalESP(sender: UIButton) {
    let data = [DiccioModel.conditional().nameEsp,DiccioModel.conditional().descriptionEsp,DiccioModel.conditional().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}


@IBAction func operatingSystemESP(sender: UIButton) {
    let data = [DiccioModel.os().nameEsp,DiccioModel.os().descriptionEsp,DiccioModel.os().linkEsp]
    performSegueWithIdentifier("menuESP", sender: data)
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "menuENG") || (segue.identifier == "menuESP"){
        if let destinationViewController = segue.destinationViewController as? DefinitionViewController{
            if let data = sender as? Array<String>{
                destinationViewController.tittle = data[0]
                destinationViewController.def = data[1]
                destinationViewController.link = data[2]
            }
        }
    }



}