【问题标题】:How to instantiate an object with a given type [duplicate]如何实例化具有给定类型的对象[重复]
【发布时间】:2016-03-23 22:29:11
【问题描述】:

我想用给定的类型实例化一个对象。这是对函数的调用:

buildObjetFromType("data", typeClass: User.self)

函数代码如下:

public static func buildObjectFromType<T>(data: String, typeClass: T.Type) -> T{ 

    print(typeClass) // will print "User"
    var object:T?

    object as! T.Type // cast the object into an User -> NOT WORKING !

    // fill the object with the data, knowing 
    // return the object once it has been filled with the data.
}

这是我的用户类:

public class User {
    private var id:String?
    private var login:String?
    private var pwd:String?
    private var nom:String?
    private var prenom:String?

    public required init(){
        id = ""
        login = ""
        pwd = ""
        nom = ""
        prenom = ""
    }

    public convenience init(_login: String, _pwd: String){
        self.init()
        login = _login
        pwd = _pwd
    }

    public convenience init(_id: String, _login: String, _pwd: String, _nom: String, _prenom: String){
        self.init(_login: _login, _pwd: _pwd)
        id = _id
        nom = _nom
        prenom = _prenom
    }
}

【问题讨论】:

  • 你在哪里实例化对象? var object:T? 只返回 nil。您需要在某处调用init 方法。
  • 我相信的实例化是“object as!T.Type”还是我错了? T.init() 不起作用,因为它不知道“T”是什么

标签: swift object generics types mirror


【解决方案1】:

见:Instantiate an object of a generic type in Swift

假设您要实例化的所有类都有一个不带参数的必需初始化程序(您可能希望它们从同一个基类继承,并将此要求添加到您的函数中),您可以执行以下操作:

static func instantiate<T where T: BaseClass>(data: String, cls: T.Type) -> T {
    let obj = T()
    // do something with obj and data
}

【讨论】:

  • 您应该将此问题标记为重复,而不是发布另一个 Stack Overflow 问题的重复答案。
  • 假设这是一种可能性,我将如何调用我的 BaseClass 的子类?
猜你喜欢
  • 2011-09-15
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2018-03-20
  • 1970-01-01
相关资源
最近更新 更多