Swift Class 函数

Swift Class Functions

所以我想知道 class 函数和 "normal instance functions"。我想知道 class 函数的目的是什么。只是为了可以使用某些功能而无需首先将 class 分配给变量还是它有其他目的?

class Dog {
    func bark()->String{
        return "Woef Woef!"
    }
    class func bark_class()->String{
        return "Woef Woef!"
    }
}

var dog = Dog()
dog.bark() // Woef Woef!

Dog.bark() // Throws and error
Dog.bark_class() // Woef Woef! > Apparently is doens't need an initiated object

要调用您的方法,您必须创建 class.

的实例
var instance = Dog()

那你说instance.bark()

调用 class 函数时不需要创建实例。 就像你说的,你可以这样调用它:

Dog.bark_class()

一个Class的乐趣也叫一个Type Method

Apple 文档:

Instance methods, as described above, are methods that are called on an instance of a particular type. You can also define methods that are called on the type itself. These kinds of methods are called type methods. You indicate type methods for classes by writing the keyword class before the method’s func keyword, and type methods for structures and enumerations by writing the keyword static before the method’s func keyword.

无需提供 class 实例即可调用静态方法 - 它们只需要 class 类型:

Dog.bark_class()

它们存在的原因是因为在某些情况下并不真正需要实例。通常,可以作为全局函数移出 class 的实例方法是作为静态方法的良好候选者。另一种确定方法是否可以静态化的方法是检查它的主体——如果它从不引用 class 属性 或方法,那么它可以静态化。 另一个明显的区别是静态方法不能直接访问实例属性和方法——为了做到这一点,class 的实例必须作为参数传入或在主体中实例化。

实例方法实际上也是静态方法,区别在于它们curried functions以class实例作为第一个参数:

var dog = Dog()
Dog.bark(dog)()

但可以使用传统语法更简洁地调用:

dog.bark()

我明确地谈到了 classes,但所说的对结构也有效 - 唯一的区别是在定义静态时使用 static 关键字代替 class方法。