Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中声明类级函数?_Swift - Fatal编程技术网

如何在Swift中声明类级函数?

如何在Swift中声明类级函数?,swift,Swift,我似乎在文档中找不到它,我想知道它是否存在于本机Swift中。例如,我可以调用NSTimer上的类级函数,如下所示: NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: "someSelector:", userInfo: "someData", repeats: true) 但我似乎找不到一种方法来处理我的自定义对象,因此我可以这样称呼它: MyCustomObject.someClassLevelFunct

我似乎在文档中找不到它,我想知道它是否存在于本机Swift中。例如,我可以调用
NSTimer
上的类级函数,如下所示:

NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: "someSelector:", userInfo: "someData", repeats: true)
但我似乎找不到一种方法来处理我的自定义对象,因此我可以这样称呼它:

MyCustomObject.someClassLevelFunction("someArg")
现在,我知道我们可以混合使用Objective-C和Swift,并且
NSTimer
类方法可能是互操作性的残余

问题:
  • Swift中是否存在类级函数

  • 如果是,如何在Swift中定义类级函数


  • 是的,您可以创建如下类函数:

    class func someTypeMethod() {
        //body
    }
    

    尽管在Swift中,它们被称为类型方法。

    您可以使用以下命令在类中定义类型方法:

    class Foo {
        class func Bar() -> String {
            return "Bar"
        }
    }
    
    然后从类名访问它们,即:

    Foo.Bar()
    
    在Swift 2.0中,您可以使用
    static
    关键字,这将防止子类重写该方法<代码>类将允许子类重写。

    更新:感谢

    对于Xcode 6 beta 5,您应该对结构使用
    static
    关键字,对类使用
    class
    关键字:

    class Foo {
        class func Bar() -> String {
            return "Bar"
        }
    }
    
    struct Foo2 {
        static func Bar2() -> String {
            return "Bar2"
        }
    }
    

    您需要在类中定义方法

     class MyClass 
     {
           class func myString() -> String
           {
               return "Welcome"
           }
    }
    
    现在您可以使用类名访问它,例如:

       MyClass.myString()
    
    这将导致“欢迎”。

    来自:

    通过在方法的func关键字之前写入static关键字来指示类型方法。类还可以使用class关键字来允许子类重写该方法的超类实现


    在结构中,必须使用
    static
    定义类型方法。对于类,您可以使用
    static
    class
    关键字,这取决于您是否希望允许子类重写您的方法。

    class func functionName()->returnType
    您可以通过检查现有的框架类来找到答案,比如
    defaultCenter()
    NSNotificationCenter
    class的方法。@NSUInteger-I仅查找Objective-C标题。你能告诉我怎么去通知中心吗?斯威夫特?好的。试试这个。在代码中键入NSNotificationCenter.defaultCenter(),然后使用Command+单击导航到swiftfile@nsuinteger--谢谢,我点击了选项,只看到了ObjC标题。很高兴你把它整理好了。(可选)安装ios8库和xcode库,以便您也可以拥有文档(如果尚未完成)。xcode>preferences>downloads>ios8库和xcode6库。您确定这甚至不会编译,它建议用
    class
    替换
    static
    。我使用的是Xcode 6 beta 5(我想这就是你的意思)。@Logan我的静态函数在类扩展中,我会再次检查。你确定你在扩展
    类而不是
    结构吗?@Logan是的,你说得对!谢谢,我已经修复了每个基于c语言(c#,java,…)的答案。静态关键字是如何使用这些类型方法中的一个类变量而不获取
    。类型没有名为
    的成员?