gpt4 book ai didi

class - 如何在 Swift 中创建类数组

转载 作者:IT王子 更新时间:2023-10-29 05:11:20 26 4
gpt4 key购买 nike

在 objective-c 中,我可以创建一个类数组并在方法中使用它

NSArray *classes = @[[NSAttributedString class]];
NSArray *items = [pasteboard readObjectsForClasses:classes
options:nil];

但是,swift 没有“class”函数。返回类的元类型会导致错误

    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)

最后一行导致“ fatal error :数组元素无法桥接到 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]

上一个答案

我无法在 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())

有效,但有点乱。

关于class - 如何在 Swift 中创建类数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com