当前位置: 首页 > 面试题库 >

如何在Swift中创建类数组

逄边浩
2023-03-14
问题内容

在目标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。例如,以下操作是不可能的(将在运行时崩溃)

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())

可以,但是有点hack。



 类似资料:
  • 问题内容: 我一直在四处搜寻有关如何使用Swift 2.0为MapView制作MKCircle注释的良好解释,但我似乎找不到足够的解释。有人可以张贴一些示例代码来显示如何创建MKCircle批注吗?这是我用来制作地图并获取坐标的代码。 问题答案: 将展示有关如何使用xcode 8.3.3的swift 3在地图视图上创建圆形叠加层的分步方法 在您的主故事板文件中,将地图工具包视图拖到故事板的场景(视

  • 问题内容: 我一直在努力在Swift中创建UIAlertView,但由于某种原因,由于出现此错误,我无法正确执行该语句: 找不到接受提供的参数的’init’的重载 这是我的写法: 然后调用它,我正在使用: 截至目前,它崩溃了,我似乎无法正确理解语法。 问题答案: 从班级: //不推荐使用UIAlertView。改用 UIAlertController 和UIAlertControllerStyle

  • 我一直在Swift中创建一个UIAlertView,但由于某种原因,我无法得到正确的语句,因为我得到了以下错误: 找不到接受所提供参数的“init”的重载

  • 问题内容: 如何在Swift中创建不可变数组? 简要阅读文档会建议您可以做 但是可悲的是,这实际上产生了一个可变的,固定大小的数组。这种可变性通常会产生令人困惑的别名和令人怀疑的别名,并且函数会改变其参数: 没有比C好多少了。 如果我想要不变性,最好的选择是将其包装成这样: 好像疯了。我在这里想念什么? 更新(2015-07-26): 这个问题可以追溯到Swift的早期。从那以后,对Swift进行

  • 问题内容: 我真的对在Swift中创建数组的方式感到困惑。您能否告诉我,有多少种方法可以创建一个带有细节的空数组? 问题答案: 干得好: 上面的内容还适用于其他类型,而不仅仅是字符串。这只是一个例子。 为它增值 我想您最终将要为其添加一个值! 要么 通过插入添加 一旦有了一些值,就可以插入新值而不是附加值。例如,如果要在数组的开头插入新对象(而不是将它们附加到末尾): 或者,您可以使用变量使插入更

  • 问题内容: 我想创建我现有的swift类的类别,但是IDE中没有选择这样做的选项。 知道在快速项目中是否存在类别?还是如何在Swift项目中实现类似的功能? 问题答案: 在Swift中,您可以用来向现有的类,结构和枚举类型添加新功能。 它们在一些方面与Objective-C类别有所不同,主要是: 他们没有名字 您不需要显式导入扩展。如果定义扩展以将新功能添加到现有类型,则新功能将在该类型的所有现有