我搜索解决这个问题很多问题,但没有人帮助我。 有2个viewControllers,我需要将数组从一个发送到另一个。
第一个viewController中的调用方法:
SubmitViewController.acceptContent(content)
接受其他:
var contentAccepted = [String]()
class func acceptContent(content: [String]){
contentAccepted = content
}
问题是在contentAccepted行上犯了错误:实例成员不能用于UIViewController
类型
答案 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
}
}
}