我遇到了一个关于将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);
所以我需要
非常感谢任何有关如何实现这一目标的提示。
THX。