2015-11-15 2 views
4

Мне просто интересно, отличаются ли эти две формы определения переменной друг от друга. Или следует использовать в каком-то специальном сценарии.Два способа определения строковой переменной в swift

var string1: String { 
    return "ok" 
} 

var string2: String = "ok" 
+0

Это не переменная, это свойство. –

ответ

3

Первый подход так называемый computed property:

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

Форма, которую вы используете, предоставляет только приемник для string1, что делает его доступным только для чтения.


Второй подход объявляет обычная stored property:

Сохраненный свойство является постоянной или переменной, которая хранится в виде части экземпляра определенного класса или структуры. Хранимыми свойствами могут быть либо хранимые свойства переменной (введенные ключом var), либо константные хранимые свойства (введенные ключевым словом let).

В вашем случае это свойство чтения-записи (объявлено с использованием ключевого слова var).


Какой должен использоваться, когда он зависит от корпуса. Но иногда можно вводить только рассчитанные свойства (например, если вы предоставляете расширение).

2

В первом случае вы создаете get для вашего string1 объекта и вы не сможете установить новое значение для него. Этот случай такой же как:

var string1: String { 
    get { 
     return "ok1" 
    } 
} 

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