我是Swift的新手并且正在学习Classes。我的问题与该代码有关;
class someClass
{
class func typeMethod(string:String) -> String
{
return string + "_Modified....."
}
}
var strModify:String = "String"
someClass.typeMethod(strModify)
那是什么?在C ++等其他语言中是否有类似的东西?我们需要在哪里?
答案 0 :(得分:2)
这是Swift中的类型方法。像一个全局函数,但在类的命名空间中。它被称为someClass.typeMethod()
,但没有someClass
的实例。
C ++中的等价物是静态成员函数,例如
class SomeClass {
public:
static std::string method(const std::string& str) {
return str + "_Modified";
}
};
...
std::string s = SomeClass::method("test");
答案 1 :(得分:0)
好class func
就像Java中的static method
:
public static void staticMethod(){
}
重点是,在您可以使用它之前,您不需要先创建类的对象。 因此,只要不需要首先构造对象,就应该使用类函数。
一个例子是像convertMilimeterToCentimeter(milimeter:Int)
这样的转换方法。该方法将值转换为参数,因此'调用者'该方法并不需要成为一个对象。所以你不需要在一个对象上调用它,但你可以在类本身上调用它:
YourClass.convertMilimeterToCentimeter(1000)
Util-classes通常主要有静态方法(例如Apache Commons IO)
所以如果你在Swift中创建一个Util-class,你会在大多数时候使用静态函数,因为不需要创建一个对象来执行这些方法。
答案 2 :(得分:0)
鉴于以下课程:
class SomeClass {
class func someClassFunction() {
}
func someFunction() {
}
}
两个函数之间的区别是第一个,class
修饰符由类本身保存,而第二个函数someFunction()
由类的实例保存。这会改变您何时/何时可以调用它们。例如,使用类函数,您不需要实例来调用函数:
SomeClass.someClassFunction()
但是使用普通函数,您需要一个实例,您可以通过使用()
实例化它来创建实例:
let foo = SomeClass()
foo.someFunction()
答案 3 :(得分:-1)
首先,第一行应为:
class SomeClass
类名应为UpperCamelCase。这声明我们正在创建一个类(而不是结构或枚举)。
class func typeMethod(string:String) -> String
{
return string + "_Modified....."
}
这是类的一个方法(与类实例上的方法相对。与类关联的函数称为方法.Swift对所有函数和方法使用关键字“func”。
(string:String)位是函数的单个参数的标签和类型。 “ - > String”位表示函数的返回类型。默认情况下,在Swift中,函数的第一个参数的标签在调用函数/方法时被删除:
SomeClass.typeMethod("Hello World")
请注意,我使用UpperCamelCase,所以现在读者很清楚他们正在调用类方法而不是实例方法。消息将发送到类本身,而不是类的特定实例。
请注意,具有单个类方法的类(如此示例)相当无意义。您也可以创建一个简单的全局函数。 Swift中有许多与任何类,结构或枚举无关的全局函数。 countElements()就是这种函数的一个很好的例子。
值得注意的是,这个类不需要继承,这意味着它不需要是一个类,即使你不想要一个全局函数。它可以很容易地定义为具有静态函数的结构。
你需要的东西取决于上下文。这个像上下文这样的例子,除了提供一个类方法的例子之外,看起来毫无意义。