我尝试做一些研究但是无法解决这个问题,那么是否有可能为UIViewController类或任何类创建一个成员呢?
在我的每一个UIViewController子类中,我都声明了数据成员
userdata = [NSManagedObject]()
所以我想知道我是否可以声明变量" userdata"在实际的UIViewController类中,直接或通过外部文件。
答案 0 :(得分:2)
您只需创建一个UIViewController
的子类,该子类具有userdata
属性,然后从该类派生所有视图控制器而不是UIViewController
类似的东西:
class BaseViewController:UIViewContrller {
var userdata = [NSManagedObject]()
}
class NewViewController:BaseViewController {
// Your sub view controller implementation goes here
}
答案 1 :(得分:2)
你应该使用扩展名。
extension UIViewController {
var userData : [NSManagedObject] {
get {
return [NSManagedObject]()
}
}
}
如果您不希望每个UIViewController
拥有该属性,则必须使用子类。
class DataViewController:UIViewContrller {
var userdata = [NSManagedObject]()
}
class NewViewController:DataViewController {
// Do something stuff to the View here
}
答案 2 :(得分:1)
如果userData
是计算属性,则可以使用扩展名:
extension UIViewController {
var userData: [NSManagedObject] {
get { return an array from somewhere else }
set { set the value to somewhere else }
}
}
如果您的属性未计算但已存储,则必须使用子类:
class BaseViewController: UIViewController {
var userData: [NSManagedObject] = []
}
让你的每个VC都继承这个类。使用此方法的缺点是视图控制器无法继承任何其他类,如UITableViewController
。
所以这是我提出的最佳方法。
创建协议:
protocol MyVC {
var userData: [NSManagedObject] { get set }
}
现在让你的每个VC都符合这个协议。在每个VC中,只需开始键入userData
并使用enter选择Xcode提供的正确完成,并自动为您添加属性。如果忘记这样做,编译将失败。