加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Swift中创建一个类数组

发布时间:2020-12-14 05:56:01 所属栏目:百科 来源:网络整理
导读:在目标c中,我可以创建一个类数组,并在方法中使用它 NSArray *classes = @[[NSAttributedString class]];NSArray *items = [pasteboard readObjectsForClasses:classes options:nil]; 但是,swift没有“类”功能。为类返回元类型会导致错误 let aClass : An
在目标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黑客:

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]

以前的答案

我无法以Swift的方式获得Class实例。看来它不能直接从AnyClass转换。例如,以下是不可能的(将在运行时崩溃)

var classes: NSMutableArray = []
classes.addObject(NSClassFromString(NSAttributedString.className()))

所以我进入了Obj-C并定义了一个简单的NSMutableArray类别:

@implementation NSMutableArray (ClassArray)

- (void)addClassByName:(NSString *)className {
    [self addObject:NSClassFromString(className)];
}

@end

然后

var classes: NSMutableArray = []
classes.addClassByName(NSAttributedString.className())

作品,但它是一个黑客。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读