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

Ленивое хранимое свойство в Swift

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

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

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

  3. Ленивые свойства полезны, когда начальное значение свойства зависит от внешних факторов, значения которых неизвестны до завершения инициализации экземпляра.

  4. Где мы должны использовать ленивое хранимое свойство

Спасибо

29.05.2017

  • С какой проблемой вы сталкиваетесь с ленивыми хранимыми свойствами? Эти утверждения очень ясны по своему смыслу. 29.05.2017

Ответы:


1

Майк Басс написал статью о ленивой инициализации в Swift http://mikebuss.com/2014/06/22/lazy-initialization-swift/

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

Вот два примера для обоих случаев из поста:

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

class Person {

var name: String

lazy var personalizedGreeting: String = {
    [unowned self] in
    return "Hello, \(self.name)!"
    }()

init(name: String) {
        self.name = name
    }
}

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

class MathHelper {

lazy var pi: Double = {
    // Calculate pi to a crazy number of digits
    return resultOfCalculation
    }()

}
29.05.2017
  • Как изменить персонализированное приветствие, если я сменю имя?? В том же коде.. 07.09.2020
  • Вы можете взглянуть на этот вопрос. У вас есть несколько способов вызвать повторную инициализацию ваших ленивых атрибутов. 09.09.2020

  • 2

    Хорошо объяснил!! Я хочу добавить простой пример, чтобы лучше понять его.

    Ленивое свойство — это хранимое свойство, память которого будет выделена только тогда, когда переменная действительно используется.

    class Car{
        lazy var brand: String = "BMW" // Memory not allocated
    }
    
    let aCar = Car()
    print(aCar.brand) // Memory allocated as it is getting used here
    
    03.06.2021
    Новые материалы

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

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

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

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

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

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

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