Swift:实例化符合协议的类(AnyClass)

时间:2015-02-23 02:28:30

标签: swift protocols instantiation

我想实现像“registerClassForAction”这样的东西。 为此,我定义了一个协议:

@objc protocol TestProt {
    func testMe() -> String
}

让我们做一个类声明:

class TestClass: NSObject, TestProt {
    func testMe() -> String {
        return "test"
    }
}

我定义了在另一个类中注册对象的函数:

func registerClassForAction(aClass: AnyClass) { ... }

切换到REPL,我会模拟寄存器方法:

let aClass: AnyClass = TestClass.classForCoder() //or .self
let tClass = aClass as NSObject.Type
let tInst = tClass() as TestProt
tInst.testMe()

这当前有效,但除了使用

之外,还有另一种实例化tClass的方法
let tClass = aClass as NSObject.Type

询问的原因,我想探索摆脱NSObject的机会,因此我的TestClass不会继承NSObject。考虑了委托,但我想控制tInst的生命周期,并能够在特定的时间点解除它。

感谢您的帮助

罗恩

1 个答案:

答案 0 :(得分:2)

这可以在Swift 2.0中实现,而不需要@objc或子类化NSObject

protocol TestProt {
    func testMe() -> String
}

class TestClass: TestProt {

    // This init is required in order
    // to construct an instance with
    // a metatype value (class.init())
    required init() {
    }

    func testMe() -> String {
        return "Hello from TestClass"
    }
}

let theClass = TestClass.self
let tInst: TestProt = theClass.init()

tInst.testMe()

enter image description here