Swift - 从类的类型初始化实例

时间:2014-12-15 11:27:34

标签: class swift initialization

我遇到了一个关于将objC代码移植到Swift的问题。

我要做的是从类类型中分配和初始化一个对象。

这是我在ObjC中的表现

-(id)getExistingVCFromClass:(Class)classVC
{
    return ([dict objectForKey: NSStringFromClass([classVC class])]);
}


-(void)storeExistingVCForClass:(id)referenceToVC ForClass:(Class)classVC
{
    [dict setObject:referenceToVC forKey:NSStringFromClass([classVC class])];
}

-(void)retrieveObject:(Class)classVC
{

        //check if we have a previous one
        id existingVC;

        if ((existingVC = [self getExistingVCFromClass:classVC]))
        {
           //i retrieved some object matching the class
        }
        else
        {
          // found nothing -> init a new instance
            id newVC= [[classVC alloc] init];
            [storeExistingVCForClass: newVC ForClass:classVC];
        }
}

这在ObjC中非常有效。

现在在Swift我有这个:

func getExistingVCFromClass(type:AnyClass) -> AnyObject?
    {
        return (dict?.objectForKey(NSStringFromClass(type)));
    }

func storeExistingVCForClass(object:AnyObject, type:AnyClass)
    {
        dict?.setObject(object, forKey: NSStringFromClass(type));
    }

func retrieveObject(type:AnyClass)
    {
        var myObj:AnyObject?;

        myObj = self.getExistingVCFromClass(type);


        if (myObj == nil)
        {
           // not found -> init , but i dont know how!!
            let newObject:AnyObject = type(); -> not compiling
            let newObject:AnyObject = type.new(); -> not compiling
        }

    }

如果我提供课程,我找不到如何初始化我的新实例。我怎样才能在Swift中解决这个问题?

此外,在objC中我不必向init发送任何参数,因为.xib文件是使用viewcontroller自动加载的。

在Swift中,它似乎没有自动加载.xib文件,因此我将这些内容添加到我的所有viewcontrollers中

 required init(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
    }

    override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!)
    {
        super.init(nibName: nibNameOrNil, bundle: nil)
    }

我必须像这样实例化我的viewcontroller(在参数中给出nib文件名):

let myVC = MyViewController(nibName: "MyViewController", bundle: nil);

所以我需要

  • 1)从匿名类实例化
  • 2)给它一些参数

非常感谢任何有关如何实现这一目标的提示。

THX。

0 个答案:

没有答案