类型方法和类型实例方法等之间的区别?

Ali*_*li 12 types properties swift

注意:我已经阅读了苹果文档并研究了一本快速的书.

  1. 我对"类型实例方法"(如果存在,如果我错了,请纠正我)和类型方法之间的区别感到困惑?

  2. 类方法和实例方法的区别?

  3. 类型属性和实例属性之间的区别(如果存在,抱歉我对类型属性主题非常困惑)?

  4. 最后,Do类属性是否存在于swift中?

对困惑感到抱歉 :'(

why*_*ite 28

在Swift中,类型命名类型复合类型.命名类型包括,结构,枚举协议.除了用户定义的命名类型之外,Swift还定义了许多命名类型,例如数组,字典和可选值.(我们现在忽略复合类型,因为它与您的问题没有直接关系.)

要回答你的问题,假设我创建了一个用户定义的类Circle(这只是一个例子):

class Circle {

    static let PI = 3.14

    var radius: Double

    init(radius: Double) {
        self.radius = radius
    }

    // Returns the area of this circle
    func area() {
        return PI * radius
    }

    // Ridiculous class method for demonstration purposes
    static func printTypeName() {
        println("Circle")
    }
} 
Run Code Online (Sandbox Code Playgroud)
  1. 我对"类型实例方法"(如果存在,如果我错了,请纠正我)和类型方法之间的区别感到困惑?

如前所述,类型是指类,结构,枚举,协议和复合类型.在我上面的例子中,我使用了一个叫做Circle定义类型.

如果我想构建Circle类的单个对象,那么我将创建一个实例.例如:

let myCircleInstance = Circle(radius: 4.5)
let anotherCircleInstance = Circle(radius: 23.1)
Run Code Online (Sandbox Code Playgroud)

以上是对象或实例Circle.现在我可以直接调用它们上的实例方法.我班级定义的实例方法area.

let areaOfMyCircleInstance = myCircleInstance.area()
Run Code Online (Sandbox Code Playgroud)

现在,类型方法是一种可以直接在类型上调用而无需创建该类型实例的方法.

例如:

Circle.printTypeName()
Run Code Online (Sandbox Code Playgroud)

请注意,static之前有一个限定符func.这表明它直接与类型相关,而不是与类型的实例相关.

  1. 类方法和实例方法的区别?

见上面的解释.

  1. 类型属性和实例属性之间的区别(如果存在,抱歉我对类型属性主题非常困惑)?

这与您的问题1中的解释类似,不同之处在于它不是应用于方法,而是应用于类型的属性(即属性,变量).

在我的Circle示例中,属性定义为:

static let PI = 3.14
var radius: Double
Run Code Online (Sandbox Code Playgroud)

该物业PI是一种类型的财产; 它可以直接通过类型访问

Circle.PI
Run Code Online (Sandbox Code Playgroud)

该属性radius是该类型的实例属性; 它可以由该类型的实例访问.使用我们之前创建的变量:

// I can do this; it will be 4.5
myCircleInstance.radius

// And this; it will be 23.1
anotherCircleInstance.radius

// But I CANNOT do this because radius is an instance property!
Circle.radius
Run Code Online (Sandbox Code Playgroud)
  1. 最后,Do类属性是否存在于swift中?

绝对!请阅读我对上述问题3的解释.将PI在我的例子属性是一个类属性的一个例子.

参考文献: