如何在迅速3

问题描述:

做的实现代码如下功能我“出口”的价值观,我有以下功能:如何在迅速3

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) 
     }) 
    } 

我看到它的琴弦邮件和美孚没有“出口”出这个功能的。 我的问题是我需要在下一个窗口中使用这两个字符串。但他们是空的?

+0

正确的,但不能得到它工作。 我现在已经试过了,知道它可能是非常基本的,但希望有人能帮助我。 试图从函数直接填充另一个屏幕,但得到一个失败 试图返回,但不会工作。 现在卡住了 –

+0

也尝试使类var的Mail_和Mobil_,并仍然工作里面的功能,但他们没有得到更新外功能 –

你定义邮件和美孚为当地变量,将过期,一旦你离开函数(或关闭在这种情况下)是不确定的 - 这是正常的方式变量斯威夫特表现(或几乎大多数语言) 。

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

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) 
{ 
+0

嗨Jay 谢谢你花时间看看我的问题。 其实我试过你没有。 1回答问我的问题。 我不知道我哪里出了问题,但即使有班级变异,他们重置后,我离开功能。 我试图做的是在Mail和Mobil的“kontakt”中填充标签,如果我尝试直接从func Tableview中获取错误,我的代码现在看起来像:(请参阅下面的答案) –

这是也是我的第一个猜测。但低于dosent的代码中,func中的断点我表明瓦尔设置正确,但断点在退出之后的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) 
    }) 
} 
+0

您好几种东西结合在一起这并不需要合并。如果你想设置var Mail_,那么你可以在闭包中做到这一点,没有理由将它传递给一个函数,然后设置它。这就是说,如果你有一个类var,它会'坚持',一旦你离开一个函数改变它。在引用类级别变量时,通常使用self.var_name ...因此在这种情况下,它将是self.Mail_ = theMail。但是,再次,没有理由将它传递给一个函数,然后分配它,只是在闭包内分配它。 – Jay

+0

再次嗨 只是试图纠正我的回答上面 再次感谢您花时间回复 –