2015-02-13 4 views
0

Я новичок в Swift и изучаю классы. Мой вопрос связан с этим кодом;Занятия в Swift

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

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

Что это? Есть ли что-то подобное на других языках, таких как C++? и где нам это нужно?

ответ

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"); 
0

Ну class func подобен static method в Java:

public static void staticMethod(){ 
} 

Дело в том, что вам не нужно создавать объект вашего класса, прежде чем вы можете использовать его. Итак, вы должны использовать функции класса, когда объект не должен быть сконструирован первым.

Примером может быть метод конвертации, такой как convertMilimeterToCentimeter(milimeter:Int). Этот метод получает значение, которое нужно преобразовать в качестве параметра, и поэтому «вызывающий» для этого метода не должен быть объектом. Так что вам не нужно вызывать его на объект, но вы можете назвать это на самом классе:

YourClass.convertMilimeterToCentimeter(1000) 

Часто Util классы имеют в основном статические методы (Apache Commons IO, например)

Так что если вы делаете Util-класс в Swift, вы будете использовать статические функции большую часть времени, потому что нет необходимости создавать объект для выполнения методов.

+0

Спасибо! @Christian Woerz, ваш ответ мне помог! – alitsnr

0

Учитывая следующий класс:

class SomeClass { 
    class func someClassFunction() { 
    } 

    func someFunction() { 
    } 
} 

Разница между этими двумя функциями является первым, с модификатором class удерживается самого класса, в то время как вторая функция someFunction() удерживается экземпляр класса. Это изменяет способ/когда вы можете их вызвать. Например, с помощью функции класса, вам не нужен экземпляр для вызова функции:

SomeClass.someClassFunction() 

Но с нормальной функцией, вам нужно экземпляр, который вы создаете с помощью инстанцировании его с помощью ():

let foo = SomeClass() 
foo.someFunction() 
-1

Чтобы начать с того, что первая строка должна гласить:

class SomeClass 

имена классов должны быть UpperCamelCase. Это объявляет, что мы создаем класс (в отличие от структуры или перечисления).

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

Это метод в классе (в отличие от метода на экземпляре класса. Функции, связанные с классом, называются методами. Свифт использует ключевое слово «Func» для всех функций и методов.

Бит (строка: String) - это метка и тип одного аргумента функции.Бит «-> String» указывает тип возврата функции. По умолчанию в Swift метка первого аргумента функции отбрасывается с вызовом функции/метода:

SomeClass.typeMethod("Hello World") 

Обратите внимание, что я использую UpperCamelCase так что теперь ясно читателю, что они вызывают метод класса а не метод экземпляра. Сообщение отправляется самому классу, а не конкретному экземпляру класса.

Обратите внимание, что класс с методом одного класса, как этот пример, довольно бессмыслен. Вы могли бы просто создать простую глобальную функцию. В Swift существует множество глобальных функций, которые не связаны ни с одним классом, структурой или перечислением. Элемент countElements() является хорошим примером такой функции.

Также стоит отметить, что этот класс не требует наследования, что означает, что он не должен быть классом, даже если вы не хотите глобальную функцию. Его можно так же легко определить как структуру со статической функцией.

Если вам нужно что-то подобное, это зависит от контекста. Этот пример, полученный вне контекста, подобный этому, выглядит совершенно бессмысленным, чем представление примера того, как выглядит метод класса.

+0

Спасибо @ user3518192 – alitsnr

+0

OP явно намеревается представить пример метода класса и спросить, почему они полезны вообще; s/он не спрашивал, как может быть полезен класс с именем «someClass» с одним методом. – Caleb

+0

Исходная крышка в имени класса является только условным - для компилятора фактического значения нет. Все типы (классы, структуры, перечисления) и протоколы должны иметь UpperCamelCase. –

Смежные вопросы