Вы в значительной степени должны это правильно.
Метод экземпляра Obj-C начинается с дефиса, «-», за которым следует тип возврата в круглых скобках. Метод класса, начинающийся с плюса «+», но в остальном тот же.
За этим следует остальная часть сигнатуры метода, которая может включать в себя несколько параметров. Каждому параметру предшествует двоеточие «:», а затем требуемый тип аргумента/параметра в круглых скобках, например. NSString *
, за которой следует, наконец, внутреннее имя для значения, которое будет передано в Читаешь полное имя метода, заявив, каждый параметр ...
initWithTitle:artist:rating
Чтение как предложение, вы говорите.:
"Inititialize экземпляр песни с названием (это NSString *), художник (также NSString *) и рейтинг (для этого требуется NSNumber *)"
-(returnType)firstPartofMethodNameThatTakestheArgument:(NSString *)argument1 andArgumentTwo:(NSString *)argument2
instanceType
является относительно новой альтернативой для id
, что означает, что тип возврата может быть любым. Это вместо этого гарантирует, что это может быть только экземпляр типа, содержащего метод, в данном случае Song
.
Что касается повторяющихся имен аргументов ... Первая часть «artist:
- это внешнее имя, которое появляется при вызове метода (если вы используете, например, завершение кода, это то, что отображается). Часть после типа аргумента (NSString *)artist
является внутреннего имени, которое будет использоваться в реализации методы. Те, могут быть одинаковыми, но они не должны быть.
Swift имеет аналогичную конструкцию, но с большим количеством опций, где вы можете выбрать писать разные внутренние и внешние имена параметров или просто использовать 1 (или использовать параметры вывода, чьи значения возможны, использовать переменные параметры, которые могут быть произвольным числом элементов, и т. д. - посмотреть в Swift Functions для более подробной информации по этим темам).
func initWith(externalTitle internalTitle:String, #artist:String, #rating:Int) -> Song
//When calling, you'd see "externalTitle:artist:rating"
//but in the method implementation you'd use "internalTitle" instead.
Благодарим за помощь! –