Закрытие в swift?

Итак, я читаю некоторый код и вижу завершающее закрытие, из моего понимания и некоторых поисковых запросов, кажется, что конечное закрытие используется, когда у вас есть последний параметр в качестве закрытия, поэтому вы можете передать его как конечное закрытие.

И вот что меня смущает. У меня есть класс A и класс B. Класс B наследуется от класса A. В классе A есть функция C выглядит так:

func C(text1: String, text2: String) -> SomeOddType{...}

теперь в классе B он переопределяет эту функцию, но тело выглядит так:

override func C(text1: String, text2:String) -> SomeOddType{
 if let someVar = super.C(text:text1, text:text2){
  //some code that's not in the super method
  return someVar
  }
}

Что это значит ??? Я так растерялся. У него нет закрытия в качестве параметра, и поскольку он уже вызывает супер-метод, код внутри версии переопределения является надстройкой к реализации?

Где завершение вашего вопроса?

Rakesha Shastri 13.09.2018 18:08

@RakeshaShastri в строке someVar. Я полагаю, это закрытие, верно? после вызова функции с {}

Anna 13.09.2018 18:10

А, я думал, у вашего метода есть аргумент о закрытии. Виноват. Но теперь я не понимаю вашего вопроса. Вы говорите, что ваш возврат - это закрытие метода? Также предоставьте полный пример, а не только фрагменты. Возможно, тот, который работает на детской площадке?

Rakesha Shastri 13.09.2018 18:13

вроде, как бы, что-то вроде? Мой вопрос: когда вызывается метод super.C, он уже возвращает объект с SomeOddType, что делает этот блок кода внутри {} после super.C? super.C {// code}?

Anna 13.09.2018 18:15

Я считаю, что этого блока кода там быть не должно, поэтому я спрашиваю, скомпилировали ли вы свой код на игровых площадках.

Rakesha Shastri 13.09.2018 18:15

@RakeshaShastri Это побежало. NVM Я понял. Это операторы if let ... SO if, этот блок принадлежит if. Виноват. Не понимал, что это разворачивается.

Anna 13.09.2018 18:18
упс Я получил туннельное зрение, думая, что это какое-то закрытие. @ _ @
Rakesha Shastri 13.09.2018 18:19

Пожалуйста, попробуйте улучшить заголовок вашего вопроса - прочтите Как спросить для получения помощи

Ashley Mills 13.09.2018 18:28
0
8
95
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

super.C(text:text1, text:text2) возвращает SomeOddType, но это не обязательно. И присваивает someVar

но что делает {} после вызова функции? Это SomeOddType {// code}, что он делает?

Anna 13.09.2018 18:12
Ответ принят как подходящий

Здесь нет конечного закрытия, это просто блок оператора if. Выражение super.C(text: text1, text: text2) условно связано с новой константой someVar. Если условное связывание выполнено успешно, он запускает блок кода «// некоторый код, которого нет в суперметоде».

Другие вопросы по теме