Nano Hash - криптовалюты, майнинг, программирование

Отсутствует инициализатор закрытия по умолчанию - быстрое объявление переменной закрытия?

Я объявил закрытие вне класса viewController, я создал одну переменную этого закрытия внутри класса viewController, но она показывает ошибку инициализатора по умолчанию, отсутствующего для этого закрытия.

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

Вот мое заявление о закрытии

typealias completionBlock = (String) -> ()  

и вот мое объявление переменной этого закрытия, которое побуждает его инициализировать.

class ViewController: UIViewController {

     var completionHandler: completionBlock = // What could be the default initializer to this closure

     override func viewDidLoad() {
         super.viewDidLoad()
     }
}

Я хочу, чтобы этот блок вызывался всякий раз, когда я получаю эти значения, необходимые для передачи. То же, что и объявление внешнего завершениеBlock для Objective-C.

22.01.2016

  • просто укажите его как completionBlock? или completionBlock! (если вы на 100% уверены, что он будет установлен) 22.01.2016
  • Он срабатывает — «фатальная ошибка: неожиданно найдено nil при развертывании необязательного значения», когда я пытаюсь вызвать — завершениеHandler (завершение) 22.01.2016

Ответы:


1

У вас есть 3 варианта

  • свойство по умолчанию:

    var completionHandler : completionBlock = { _ in }
    
  • Неявно развернутый Необязательный - делайте это только тогда, когда вы на 100% уверены, что значение будет установлено, прежде чем вызывать completionHandler:

    var completionHandler: completionBlock!
    
  • "обычный" Необязательный

    var completionHandler: completionBlock?
    
    // later callable via
    completionHandler?("hi")
    
22.01.2016
  • Спасибо, Люк, ответ на мой вопрос - это ваш первый случай - свойство замыкания по умолчанию, это то, что я хотел знать. Еще одна удача, если вы не возражаете, не могли бы вы сообщить мне, откуда вы так глубоко узнали об этих вещах? когда я пытался изучить документы Apple, но пока не нашел решения. 22.01.2016
  • @KiranJasvanee Я нигде этому не учился, я начал отвечать на быстрые вопросы и программировать на быстром. Я не читал ни одного учебника. В вашем случае вам просто нужно обеспечить закрытие. Аргумент закрытия значения не имеет, поэтому _, тело должно быть пустым там нет тела, вот и все. 22.01.2016
  • Спасибо @luk2302. Ценится. 22.01.2016

  • 2

    Я думаю, что это должно быть что-то вроде этого?

    var completionHandler: completionBlock = { stringValue  in 
            // but your code here
        }
    
    22.01.2016
  • Здравствуйте, Исмаил, я ценю ваш ответ. luk2302 дал актуальный ответ, который я искал. Я хотел знать свойство инициализации закрытия по умолчанию, так как для массива это [] и для int равно 0. 22.01.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..