将变量发送到下一个viewcontroller swift时获取双变量

时间:2015-07-02 06:30:28

标签: swift variables tableview tableviewcell

我在import语句之后创建全局变量:

var kontenid = ""
var judulkonten = ""

然后我通过tableview和prepareForSegue发送到FreeTiles视图控制器(其他视图控制器):

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    //let cell = tableView.dequeueReusableCellWithIdentifier(reuseContentFreeIdentifier, forIndexPath: indexPath) as! FreeTableViewCell
    var contentku = contents[indexPath.row] as ContentModel
    kontenid = contentku.id
    judulkonten = contentku.title
    performSegueWithIdentifier("lemparkonten", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    if (segue.identifier == "lemparkonten") {
        var svc = segue.destinationViewController as! FreeTiles;
        svc.idcontent = kontenid
        svc.namacontent = judulkonten
    }
}

在FreeTiles视图控制器上,我把它放在了类中:

var idcontent :String!
var namacontent :String!

但是当我在FreeTiles视图控制器上打印时:

println("konten id nya:\(idcontent)")
println("judul nya:\(namacontent)")

我有两份idcontent和两份namacontent记录,第一份是空的,第二份是正确的idcontent和namacontent。

如何避免在两个视图控制器之间发送变量时得到两个变量结果?为每个threw变量只得到一个结果的正确代码是什么?

编辑: 它似乎缓存在xcode日志上,因为当我更改println时,它只显示一个日志。

if idcontent.isEmpty && namacontent.isEmpty {
        //println("Nothing to see here")
    }else{
        var content_id = idcontent
        var content_name = namacontent
        println("content_id:\(content_id)")
        println("content_name:\(content_name)")
    }

因此,我在FreeTiles(第二个视图控制器)上进行过滤以获取填充变量。

问候。

2 个答案:

答案 0 :(得分:0)

首先,如果要声明全局变量,则需要指定它的范围。让我们说:

public var kontenid = ""
public var judulkonten = ""

此外,一旦声明了全局变量,您就可以从任何地方访问它,它也会反映您何时更改该值。

因此,在为变量赋值

之后
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    //let cell = tableView.dequeueReusableCellWithIdentifier(reuseContentFreeIdentifier, forIndexPath: indexPath) as! FreeTableViewCell
    var contentku = contents[indexPath.row] as ContentModel
    kontenid = contentku.id
    judulkonten = contentku.title
    performSegueWithIdentifier("lemparkonten", sender: self)
}

在您的准备方法中,您不需要分配值:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    if (segue.identifier == "lemparkonten") {
        var svc = segue.destinationViewController as! FreeTiles;

    }
}

现在您可以在任何地方访问上述全局变量,以便您可以直接在其他类中使用它:

if idcontent.isEmpty && namacontent.isEmpty {
        //println("Nothing to see here")
    }else{
        var content_id = kontenid
        var content_name = judulkonten
        println("content_id:\(content_id)")
        println("content_name:\(content_name)")
    }
}

如果您对此代码有任何疑问,请与我们联系。

答案 1 :(得分:0)

您使用代码打印变量2次:

    override func viewDidLoad() { 
       super.viewDidLoad() 
       println("konten id nya:(idcontent)") // first
       println("judul nya:(namacontent)")  // second
       if idcontent.isEmpty && namacontent.isEmpty { //println("Nothing to see here") 
    } else { 
    var content_id = idcontent var content_name = namacontent     
println("content_id: (content_id)") // 3
println("content_name:(content_name)") // 4
    }}

您的代码似乎可以通过segue发送数据。否则你可以在这里查看我的答案:

Sending data with Segue with Swift