«stati c let» против «let» для объявления констант класса c - PullRequest
2 голосов
/ 06 февраля 2020
class CurrencyConverter {

    // 1
    private let conversionRate = 1.3 

    // 2
    private static let conversionRate = 1.3

    func convertToForeign(fromlocal local: Double) -> Double {
        return local * CurrencyConverter.conversionRate
    }
}

let c = CurrencyConverter()
print(c.convertToForeign(fromlocal: 5))

С учетом приведенного выше фрагмента кода предположим, что мне нужно использовать ТОЛЬКО константу conversionRate в методе экземпляра.

Каковы плюсы и минусы объявления conversionRate только (1) let против (2) static let?

Какой стиль будет более читабельным и оптимизированным?

Кроме того, скажем, мне понадобится только 1 кратковременный экземпляр CurrencyConverter и conversionRate сам по себе громоздок (массив из 10K Doubles). Будет ли (1) let conversionRate оптимизирована память?

Ответы [ 3 ]

2 голосов
/ 06 февраля 2020

Ни. Используйте необитаемый (без учета регистра) enum для создания пространства имен Constant; это читается лучше.

class CurrencyConverter {
    private enum Constant {
        static let conversionRate = 1.3
    }
    func convertToForeign(fromlocal local: Double) -> Double {
        return local * Constant.conversionRate
    }
}

let c = CurrencyConverter()
print(c.convertToForeign(fromlocal: 5))
1 голос
/ 06 февраля 2020

В приведенном ниже коде

private let conversionRate = 1.3

приведенное выше является переменной экземпляра, т. Е. Будет длиться до тех пор, пока существует экземпляр из CurrencyConverter (c). Как только c выходит из области видимости, область действия conversionRate's также заканчивается.

Принимая во внимание, что в приведенном ниже коде

private static let conversionRate = 1.3

Здесь conversionRate связан с class CurrencyConverter, а не экземпляр . Таким образом, он останется в памяти, даже если экземпляр c выходит из области видимости, т. Е. До тех пор, пока приложение работает.

Таким образом, создание переменной экземпляра более оптимизировано, чем создание stati c переменная .

0 голосов
/ 06 февраля 2020

Если вы добавите static к class method или field, то он будет называться class field/method, при этом вы сможете получить к нему доступ, не создавая instance из class.

Без ключевого слова static field/method будет instance field/method, и это доступно только при создании экземпляра класса.

В этом случае лучше go с полем static, так как оно не зависит от другого класса fields/methods, а также эффективно использует память, если у вас много объектов одного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...