从其他ViewController调用方法|迅速

时间:2016-05-25 14:21:15

标签: ios swift view controller viewcontroller

我搜索解决这个问题很多问题,但没有人帮助我。 有2个viewControllers,我需要将数组从一个发送到另一个。

第一个viewController中的调用方法:

   SubmitViewController.acceptContent(content)

接受其他:

var contentAccepted = [String]()

class func acceptContent(content: [String]){

    contentAccepted = content

}

问题是在contentAccepted行上犯了错误:实例成员不能用于UIViewController类型

2 个答案:

答案 0 :(得分:1)

您指的是类型方法中的self。 这就是苹果在这件事上说的话:

  

在类型方法的主体内,隐式self属性引用   类型本身,而不是该类型的实例。对于结构   和枚举,这意味着你可以使用self来消除歧义   在类型属性和类型方法参数之间,就像你一样   实例属性和实例方法参数。

     

更一般地说,您使用的任何不合格的方法和属性名称   在一个类型方法体内将引用其他类型级别   方法和属性。类型方法可以调用另一种类型方法   使用其他方法的名称,而无需使用前缀   类型名称。同样,结构和枚举的类型方法也可以   通过使用不带a的type属性的名称来访问类型属性   类型名称前缀。

More info on type-methods (class-methods) can be found here

尝试这样做:

var contentAccepted = [String]()

class func acceptContent(content: [String]){

    ViewController().contentAccepted = content

}

确保您确实需要类型方法。

答案 1 :(得分:0)

您遇到的问题是contentAccepted是一个实例变量(应该是),acceptContent()是一个类方法。因此,您的方法无法获取您的变量。在能够访问其变量之前,您需要创建SubmitViewController的实例。

let submitViewController = SubmitViewController()
submitViewController.contentAccepted = content

首先创建一个SubmitViewController实例,您现在可以访问该实例变量。

如果您要在segue中将信息从一个View Controller传递到另一个View Controller,您可以考虑使用prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "Submit" {
            if let view = segue.destinationViewController as? SubmitViewController {
                view.contentAccepted = content // If content is an instance variable
            }

        }
    }