Ios 为UIViewController类创建成员

Ios 为UIViewController类创建成员,ios,swift,Ios,Swift,我试着做了一些研究,但没有弄清楚,那么是否可以为类UIViewController或任何此类创建成员 在我的每个UIViewController子类中,我都声明了数据成员 userdata = [NSManagedObject]() 所以我想知道是否可以在实际的UIViewController类中声明变量“userdata”,直接或通过外部文件。您只需创建一个子类UIViewController,该子类具有userdata属性,然后从该类派生所有视图控制器,而不是UIViewControlle

我试着做了一些研究,但没有弄清楚,那么是否可以为类UIViewController或任何此类创建成员

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

userdata = [NSManagedObject]()

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

您只需创建一个子类
UIViewController
,该子类具有
userdata
属性,然后从该类派生所有视图控制器,而不是
UIViewController

比如:

class BaseViewController:UIViewContrller {
    var userdata = [NSManagedObject]()
}

class NewViewController:BaseViewController {
    // Your sub view controller implementation goes here
}

您只需创建一个子类
UIViewController
,该子类具有
userdata
属性,然后从该类而不是
UIViewController

比如:

class BaseViewController:UIViewContrller {
    var userdata = [NSManagedObject]()
}

class NewViewController:BaseViewController {
    // Your sub view controller implementation goes here
}

您应该使用扩展名

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
}

您应该使用扩展名

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
}

如果
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提供的正确补全,属性就会自动添加。如果忘记执行此操作,编译将失败。

如果
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提供的正确补全,属性就会自动添加。如果忘记执行此操作,编译将失败。

Ha!真不敢相信我竟然没有想到这一点。完美的答案,谢谢!很高兴能帮上忙:)哈!真不敢相信我竟然没有想到这一点。完美的答案,谢谢!很高兴能帮上忙:)