ios - 如何在实例方法中调用类型方法

标签 ios class methods types swift

Apple 有一个不错的 explanation of Type (Class) Methods ,但是,他们的示例如下所示:

class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
}
SomeClass.typeMethod()

我看到这个完全相同的例子随处可见。我的问题是,我需要从我的类的一个实例中调用我的类型方法,但这似乎无法计算。

我一定是做错了什么,但我注意到 Apple 还不支持类属性。我想知道我是否在浪费时间。

我在 Playground 上试过这个:

class ClassA
{
    class func staticMethod() -> String { return "STATIC" }

    func dynamicMethod() -> String { return "DYNAMIC" }

    func callBoth() -> ( dynamicRet:String, staticRet:String )
    {
        var dynamicRet:String = self.dynamicMethod()
        var staticRet:String = ""

//        staticRet = self.class.staticMethod() // Nope
//        staticRet = class.staticMethod() // No way, Jose
//        staticRet = ClassA.staticMethod(self) // Uh-uh
//        staticRet = ClassA.staticMethod(ClassA()) // Nah
//        staticRet = self.staticMethod() // You is lame
//        staticRet = .staticMethod() // You're kidding, right?
//        staticRet = this.staticMethod() // What, are you making this crap up?
//        staticRet = staticMethod()  // FAIL

        return ( dynamicRet:dynamicRet, staticRet:staticRet )
    }
}

let instance:ClassA = ClassA()
let test:( dynamicRet:String, staticRet:String ) = instance.callBoth()

有人知道我的线索吗?

最佳答案

var staticRet:String = ClassA.staticMethod()

这行得通。它不接受任何参数,因此您无需传入任何参数。您还可以像这样动态获取 ClassA:

swift 2

var staticRet:String = self.dynamicType.staticMethod()

swift 3

var staticRet:String = type(of:self).staticMethod()

关于ios - 如何在实例方法中调用类型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472399/

相关文章:

python - 如何在 Python 2.7 中查找仅在子类中定义的方法?

ios - 将相机与 Mac Catalyst 结合使用

ios - 使用分割 View Controller 时,状态栏灯光内容不会出现在导航 Controller 中

python - 类实例作为静态属性

html - 如何在显示 : none? 后使用类来显示特定元素

java - 我可以从命令行调用除 main(String[]) 之外的 java 方法吗?

ios - 模态下的弹出/推送 View

ios - Swift UITableView didSelectRowAtIndexPath 在 multipleSection 和多个原型(prototype)单元格中

c++ - 创建带有和不带有 new 关键字的 C++ 对象

java - 有没有 "UNIVERSAL"方法来初始化对象数组? ( java )