Function Swift类函数

Function Swift类函数,function,class,swift,Function,Class,Swift,所以我想知道类函数和“普通实例函数”。我想知道类函数的用途是什么。它只是为了使用某些函数而不必首先将类赋给变量,还是它有其他用途 class Dog { func bark()->String{ return "Woef Woef!" } class func bark_class()->String{ return "Woef Woef!" } } var dog = Dog() dog.bark() // Woef

所以我想知道类函数和“普通实例函数”。我想知道类函数的用途是什么。它只是为了使用某些函数而不必首先将类赋给变量,还是它有其他用途

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

要调用您的方法,您必须创建该类的实例

var instance = Dog()
然后你说
instance.bark()

当您想要调用一个类func时,不需要创建一个实例。 就像你说的,你可以用:

Dog.bark_class()
类乐趣也称为
类型方法

苹果文档:

如上所述,实例方法是在特定类型的实例上调用的方法。还可以定义对类型本身调用的方法。这些类型的方法称为类型方法。通过在方法的func关键字之前写入关键字class来指示类的类型方法,通过在方法的func关键字之前写入关键字static来指示结构和枚举的类型方法


可以在不提供类实例的情况下调用静态方法-它们只需要类类型:

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

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

var dog = Dog()
Dog.bark(dog)()
但使用传统语法可以更简洁地调用哪一个:

dog.bark()

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

如何从bark\u class()中调用bark()?一旦创建了一个类函数,我就很难从该类中访问其他非clas函数。@BlueGuy您调用它的方式与在静态/类方法外调用它的方式相同:作为实例方法,您需要一个实例。