在目标c中,我可以创建一个类数组并在方法中使用它
NSArray *classes = @[[NSAttributedString class]]; NSArray *items = [pasteboard readObjectsForClasses:classes options:nil];
但是,swift没有“类”功能。返回类的元类型会导致错误
let aClass : AnyClass! = NSAttributedString.self //or let aClass:AnyClass! = NSAttributedString.classForArchiver() let pasteboard = NSPasteboard.generalPasteboard() let classes = [aClass] let objects = pasteboard.readObjectsForClasses(classes, options: nil)
最后一行导致“致命错误:数组元素无法桥接到Objective-C”
如何在Swift中创建类数组?
显然,此问题已在Beta 3中修复,因此不再需要解决方法
我发现了一个纯粹的Swift hack:
func classFromType<T: NSObject>(type: T.Type) -> AnyObject! { return T.valueForKey("self") //ask for class indirectly... } var clazz: AnyObject = classFromType(NSAttributedString.self) var classes = [clazz]
先前的答案
我无法Class在Swift中以任何方式获取实例。似乎无法直接从转换AnyClass。例如,以下操作是不可能的(将在运行时崩溃)
Class
AnyClass
var classes: NSMutableArray = [] classes.addObject(NSClassFromString(NSAttributedString.className()))
因此,我进入了Obj-C并定义了一个简单的NSMutableArray类别:
NSMutableArray
@implementation NSMutableArray (ClassArray) - (void)addClassByName:(NSString *)className { [self addObject:NSClassFromString(className)]; } @end
然后
var classes: NSMutableArray = [] classes.addClassByName(NSAttributedString.className())
可以,但是有点hack。