我如何"出口"来自swift 3中tableview函数的值

时间:2017-04-14 20:08:05

标签: ios swift uitableview firebase segue

我有以下功能:

   public func tableView(_ tableView: UITableView, didSelectRowAt 
   indexPath: IndexPath)
   {
    let currentcell = telefonbog[indexPath.row]
    ref = FIRDatabase.database().reference()
    ref?.child("medarbejder").child(currentcell).observeSingleEvent(of: 
    .value, with: { (snapshot) in
        let value = snapshot.value as? NSDictionary
        let Mail = (value?["Mail"] as? String)!
        let Mobil = (value?["Mobil"] as? String)!
//      self.test.text = Mail
        self.performSegue(withIdentifier: "kontakt", sender: self)
       })
    }

我认为邮件和美孚没有"导出"超出这个功能。 我的问题是我需要在下一个窗口中使用这两个字符串。但他们是空的?

2 个答案:

答案 0 :(得分:0)

您将Mail和Mobil定义为本地变量,一旦您离开函数(或在这种情况下为闭包),它将过期并变为未定义 - 这是变量在Swift(或漂亮)中的正常行为方式大多数语言)。

如果你想保持变量存活,需要在函数外部定义它们作为类变量,或者将它们作为参数传递给另一个函数。

var mail = ""
var mobil = ""

   public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
   {
    let currentcell = telefonbog[indexPath.row]
    ref = FIRDatabase.database().reference()
    ref?.child("medarbejder").child(currentcell).observeSingleEvent(of: 
                             .value, with: { (snapshot) in
        let value = snapshot.value as? NSDictionary
        self.mail = (value?["Mail"] as? String)!
        self.mobil = (value?["Mobil"] as? String)!
        self.performSegue(withIdentifier: "kontakt", sender: self)
       })
   }

public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
   {
    let currentcell = telefonbog[indexPath.row]
    ref = FIRDatabase.database().reference()
    ref?.child("medarbejder").child(currentcell).observeSingleEvent(of: 
                             .value, with: { (snapshot) in
        let value = snapshot.value as? NSDictionary
        let mail = (value?["Mail"] as? String)!
        let mobil = (value?["Mobil"] as? String)!
        self.doSegue(theMail: mail, theMobile: mobile)
     })
    }    

func doSegue (theMail: String, theMobile: String) {
    //do something with mail and mobile var
    self.performSegue(withIdentifier: "kontakt", sender: self)
{

答案 1 :(得分:0)

这也是我的第一个猜测。但是下面的代码是dosent,func中的一个断点显示Var设置正确,但是在退出func之后的断点显示它会回到“”

var Mail = ""

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    let currentcell = telefonbog[indexPath.row]
    ref = FIRDatabase.database().reference()
    ref?.child("medarbejder").child(currentcell).observeSingleEvent(of: .value, with: { (snapshot) in
        let value = snapshot.value as? NSDictionary
        self.Mail = (value?["Mail"] as? String)!
//      let Mobil = (value?["Mobil"] as? String)!
        self.performSegue(withIdentifier: "kontakt", sender: self)
    })
}