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

Swift语言NSClassFromString

侯池暝
2023-03-14
问题内容

如何在Swift语言中实现反射?

如何实例化课程

[[NSClassFromString(@"Foo") alloc] init];

问题答案:

请注意,Swift类现在已命名为名称空间,因此它将是“ AppName.MyViewController”而不是“ MyViewController”

从XCode6-beta 6/7开始不推荐使用

使用XCode6-beta 3开发的解决方案

多亏了Edwin Vermeer的回答,我能够通过执行以下操作来构建一些东西来将Swift类实例化为Obj-C类:

// swift file
// extend the NSObject class
extension NSObject {
    // create a static method to get a swift class for a string name
    class func swiftClassFromString(className: String) -> AnyClass! {
        // get the project name
        if  var appName: String? = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as String? {
            // generate the full name of your class (take a look into your "YourProject-swift.h" file)
            let classStringName = "_TtC\(appName!.utf16count)\(appName)\(countElements(className))\(className)"
            // return the class!
            return NSClassFromString(classStringName)
        }
        return nil;
    }
}

// obj-c file
#import "YourProject-Swift.h"

- (void)aMethod {
    Class class = NSClassFromString(key);
    if (!class)
        class = [NSObject swiftClassFromString:(key)];
    // do something with the class
}

编辑

您也可以在纯obj-c中执行此操作:

- (Class)swiftClassFromString:(NSString *)className {
    NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
    NSString *classStringName = [NSString stringWithFormat:@"_TtC%d%@%d%@", appName.length, appName, className.length, className];
    return NSClassFromString(classStringName);
}

我希望这会对某人有所帮助!



 类似资料:
  • 问题内容: 我有两个控制器,我需要调用第一个控制器到第二个控制器的功能:在第二个控制器中,我在类中创建了协议和初始化委托: 第一控制人 但是函数没有被调用 问题答案: 我将假设您正在使用情节提要。如果我是正确的话,那么您的问题是,在您的“第一个控制器”中创建的“”不是您要演示的实际内容。您将需要设置你的 第二控制人 不变的 第一控制人

  • 本文向大家介绍Swift语言过滤,包括了Swift语言过滤的使用技巧和注意事项,需要的朋友参考一下 示例 通过从流中选择通过特定条件的元素来创建流称为过滤            

  • Swift 是编写程序的绝佳选择,无论是手机、电脑还是服务器,任何能跑代码的设备都是如此。它是一门集现代语言之大成,集结了苹果的工程师文化精髓以及开源社区多样化于一身的编程语言。编译器为专为性能所调优,语言专为开发所优化,二者绝不互相妥协。

  • Swift 是编写程序的绝佳选择,无论是手机、电脑还是服务器,任何能跑代码的设备都是如此。它是一门集现代语言之大成,集结了苹果的工程师文化精髓以及开源社区多样化于一身的编程语言。

  • 中文版 Apple 官方 Swift 教程《The Swift Programming Language》 目录: 欢迎使用 Swift 关于 Swift(完成 By numbbbbb) Swift 初见(完成 By numbbbbb) Swift 教程 基础部分(完成 By numbbbbb, lyuka, JaySurplus) 基本操作符(完成 By @xielingwang) 字符串和字符

  • 问题内容: 我只是想知道Swift是像php一样的动态还是静态的,我的意思是我可以在应用程序运行时生成类吗? 问题答案: 它是静态的-非常静态。编译器必须有关于所有类和功能的全部信息 在编译时 。您可以(使用)“扩展”现有的类,但是即使那样,您也必须在编译时完全定义该扩展所包含的内容。 Objective-C是动态的,并且在现实生活中,由于您可能会在Cocoa的存在下使用Swift,因此可以使用O