将Swift类作为参数传递,然后从中调用类方法

时间:2015-04-18 03:50:53

标签: ios swift protocols swift-protocols

我希望能够将一个类存储为变量,所以我可以稍后调用类方法,如下所示:

class SomeGenericItem: NSObject
{
    var cellClass: AnyClass

    init(cellClass: AnyClass)
    {
        self.cellClass = cellClass
    }

    func doSomething(p1: String, p2: String, p3: String)
    {
        self.cellClass.doSomething(p1, p2: p2, p3: p3)
    }
}

class SomeClass: NSObject
{
    class func doSomething(p1: String, p2: String, p3: String)
    {
        ...
    }
}

我希望能够说出类似的内容:

let someGenericItem = SomeGenericItem(cellClass: SomeClass.self)

someGenericItem.doSomething("One", p2: "Two", p3: "Three")

我想弄清楚的是:

1)如何定义协议以便我可以调用class func doSomething?
2)cellClass的声明需要什么? 3)电话会是什么样的?

1 个答案:

答案 0 :(得分:3)

协议不能定义类方法,但静态方法很好。 你需要你的包装器是通用的,并指定一个'where'约束,以保证包装类型符合你的协议。

示例:

protocol FooProtocol
{
    static func bar() -> Void
}

class FooishClass : FooProtocol
{
    static func bar() -> Void
    {
        println( "FooishClass implements FooProtocol" )
    }
}

class FooTypeWrapper< T where T: FooProtocol >
{   
    init( type: T.Type )
    {
        //no need to store type: it simply is T
    }

    func doBar() -> Void
    {
        T.bar()
    }
}

使用:

let fooishTypeWrapper = FooTypeWrapper( type: FooishClass.self )
fooishTypeWrapper.doBar()