我想实现像“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的生命周期,并能够在特定的时间点解除它。
感谢您的帮助
罗恩
答案 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()