【问题标题】:How to call Type Methods within an instance method如何在实例方法中调用类型方法
【发布时间】:2014-08-19 18:40:43
【问题描述】:

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

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

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

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

我在操场上试过这个:

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()

有人知道吗?

【问题讨论】:

    标签: ios class methods types swift


    【解决方案1】:

    我想为这个老问题再添加一个转折点。

    在今天的 Swift 中(我认为它在 4 处切换,但我不确定),我们已将 type(of: self) 替换为 Self(注意大写“S”)。

    【讨论】:

      【解决方案2】:
      var staticRet:String = ClassA.staticMethod()
      

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

      斯威夫特 2

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

      斯威夫特 3

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

      【讨论】:

      • 你是绝对正确的。我不知道为什么我不尝试那个。时间一到,我会尽快给你做绿检,Speedy Gonzales。
      • self.dynamicType.staticMethod() 对我不起作用。
      • 它只是哇,你从哪里得到这个'dynamicType'?我没有在文档中找到它。
      • dynamicType 是我这几天一直在寻找的东西...谢谢!
      • 在 Swift 3 中 type(of: self) 替换 self.dynamicType
      【解决方案3】:

      在 Swift 3 中,您可以使用:

      let me = type(of: self)
      me.staticMethod()
      

      【讨论】:

      • 谢谢!我很感激这个提示。
      • 有效,但其他人认为这很丑?
      • 为什么我在某处读到 Swift 3 引入了一个新的大写 Self 关键字来表示当前类?我试过了,它似乎根本不起作用,现在我什至找不到它的参考。
      • 在 Swift 中调用类函数真的还是这么别扭吗?
      • @devios1 除非你不想写类名
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多