为UIViewController类创建一个成员

时间:2017-03-22 06:13:35

标签: ios swift

我尝试做一些研究但是无法解决这个问题,那么是否有可能为UIViewController类或任何类创建一个成员呢?

在我的每一个UIViewController子类中,我都声明了数据成员

userdata = [NSManagedObject]()

所以我想知道我是否可以声明变量" userdata"在实际的UIViewController类中,直接或通过外部文件。

3 个答案:

答案 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提供的正确完成,并自动为您添加属性。如果忘记这样做,编译将失败。