类 在 Swift

Classes in Swift

我是 Swift 的新手,正在学习 类。我的问题与该代码有关;

  class someClass
{
    class func typeMethod(string:String) -> String
    {
        return string + "_Modified....."
    }
}

var strModify:String = "String"
someClass.typeMethod(strModify)

那是什么?在 C++ 等其他语言中有类似的东西吗?我们在哪里需要它?

好吧 class func 就像 Java 中的 static method:

public static void staticMethod(){
}

关键是您不需要先创建 class 的对象才能使用它。 因此,只要不需要先构造对象,就应该使用 class 函数。

一个例子是像 convertMilimeterToCentimeter(milimeter:Int) 这样的转换方法。该方法获取要转换为参数的值,因此该方法的 'caller' 不需要是对象。所以你不需要在对象上调用它,但你可以在 class 本身上调用它:

YourClass.convertMilimeterToCentimeter(1000)

通常 Util-classes 主要有静态方法(例如 Apache Commons IO)

所以如果你在Swift中制作一个Util-class,你大部分时间会使用静态函数,因为不需要创建一个对象来执行这些方法。

是Swift中的类型方法。像一个全局函数,但是在 class 的命名空间中。它被称为 someClass.typeMethod(),但没有 someClass.

的实例

C++ 中的等价物是静态成员函数,例如

class SomeClass {
public:
   static std::string method(const std::string& str) {
       return str + "_Modified";
   } 
};

...

std::string s = SomeClass::method("test");

给出以下 class:

class SomeClass {
    class func someClassFunction() {
    }

    func someFunction() {
    }
}

两个函数的区别在于第一个函数,class修饰符由class本身持有,而第二个函数someFunction()由一个实例持有一个class。这改变了 how/when 你可以打电话给他们。例如,使用 class 函数,您不需要实例来调用该函数:

SomeClass.someClassFunction()

但是使用普通函数,您确实需要一个实例,您可以使用 ():

实例化它来创建实例
let foo = SomeClass()
foo.someFunction()

首先,第一行应为:

class SomeClass

Class 名称应为 UpperCamelCase。这声明我们正在制作一个 class(而不是结构或枚举)。

class func typeMethod(string:String) -> String
{
    return string + "_Modified....."
}

这是 class 上的方法(与 class 实例上的方法相对。与 class 关联的函数称为方法。Swift 对所有函数和方法使用关键字 "func"。

(string:String) 位是函数单个参数的标签和类型。 “->String”位表示函数的 return 类型。默认情况下,在 Swift 中,函数的第一个参数的标签在调用 function/method:

时被删除
SomeClass.typeMethod("Hello World")

请注意,我使用了 UpperCamelCase,所以现在 reader 很清楚他们正在调用 class 方法而不是实例方法。消息被发送到 class 本身,而不是 class.

的特定实例

请注意,class 只有一个 class 方法,就像这个例子一样,是毫无意义的。您不妨创建一个简单的全局函数。 Swift 中有许多与任何 class、结构或枚举无关的全局函数。 countElements() 是此类函数的一个很好的例子。

还值得注意的是,此 class 不需要继承,这意味着它不需要是 class,即使您不想要全局函数。它可以很容易地定义为具有静态函数的结构。

你在哪里需要这样的东西取决于上下文。这个例子,像这样断章取义,除了展示一个 class 方法的例子之外看起来毫无意义。