【问题标题】:How to pass a class and method to create an instance of a class? [duplicate]如何传递一个类和方法来创建一个类的实例? [复制]
【发布时间】:2014-08-12 17:53:23
【问题描述】:

我刚开始学习 Apple Swift 我无法处理问题,我有方法可以帮助 Objective-C 请在 Apple Swift 上重写

- (void)setClass:(Class)aClass {
    NSObject *object = [[aClass alloc] init];
}

调用方法(继承自NSObject的用户):

[self setClass:[User class]];

如何在 Apple Swift 上重复此类操作? 谢谢!

【问题讨论】:

  • @MartinR - 不,请仔细阅读我的问题
  • 我做到了!根据那里给出的答案,[User class] 在 Swift 中是 User.self,而 [[aClass alloc] init] 只是 aClass()。你试过了吗?

标签: swift


【解决方案1】:

Here is an article 关于在 Swift 中按名称实例化类。通过使用方法创建一个Objective-C类来解决问题

+ (id)create:(NSString *)className
{
    return [NSClassFromString(className) new];
}

并从 Swift 调用它。 源码在GitHub上:https://github.com/ijoshsmith/swift-factory

更新:

Here 是一个更简单的解决方案:

var clazz: NSObject.Type = TestObject.self
var instance : NSObject = clazz()

if let testObject = instance as? TestObject {
    println("yes!")
}

当然,该类必须是 NSObject 的子类。

你的函数将是:

func setClass (myClass: NSObject.Type){
    var object = myClass()
}

【讨论】:

  • 请查看stackoverflow.com/help/how-to-answer为链接提供上下文 鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户有所了解它是什么以及它为什么在那里。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。
  • 注意AnyClass是写任何类型对应一个类的类型的更通用的方式
  • @newacct 我知道。该解决方案仅适用于 NSObject 子类。使用AnyClass会报错:'AnyObject' is not constructible with '()'
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 2014-08-10
  • 2023-01-25
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多