【问题标题】:Pass class as param into function which returns an object of this type in swift?将类作为参数传递给函数,该函数快速返回这种类型的对象?
【发布时间】:2017-04-03 13:41:52
【问题描述】:

我需要这样写:

func createInstanceOfClass(someClass: Class) -> UIViewController {
  var vc = someClass()

  //some initialization
  ...
  //

  return 
}

我发现了一些类似的问题,但其中一些不适合这个任务,一些关于 param T 这似乎是额外的。

【问题讨论】:

  • 您的函数正在返回 ViewController。那是什么?
  • 固定代码。只是在我的特殊情况下,此方法根据给定的视图控制器的类创建和初始化视图控制器。
  • 您需要的是一个通用函数,这就是您找到的答案使用T 参数的原因。我建议阅读 Swift 中的泛型,然后再看看你找到的答案。

标签: swift class instantiation func function-parameter


【解决方案1】:

以下是您可以如何执行此操作的示例。使用T.Type 引用T 的元类型,使用T.self 引用T 类型。

protocol DefaultConstructible {
    init()
}

class A: DefaultConstructible {
    required init() {}
}

struct B: DefaultConstructible {
    init() {}
}

func makeAnInstance<T: DefaultConstructible>(of c: T.Type) -> T {
    return c.init()
}

let a = makeAnInstance(of: A.self)
let b = makeAnInstance(of: B.self)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2018-06-23
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    相关资源
    最近更新 更多