2016-05-15 2 views
2

это может звучать глупо, но я не могу понять, почему программисты объявлять переменные в Swift следующим образом:Почему мы используем ключевое слово «get» в объявлении переменных Swift?

class Person: NSObject { 
    var name: String { get } 
} 

Почему ключевое слово «получить» используется? Почему «установлен» пропущен? Они не должны быть использованы следующим образом:

class Person: NSObject { 
    var name: String { 
     get { 
      // getter 
     } 
     set { 
      // setter 
     } 
    } 
} 

Я думаю, это спам вопрос, но я заинтересован в теоретическом определении {} получить

+1

http://stackoverflow.com/questions/24699327/swift-what-are-get-and-set –

+0

Спасибо, я знаю, как использовать ** set **, ** get **, ** willSet * *, ** didSet **, но мне интересен этот фрагмент кода: ** {get} **. И почему это на самом деле ничего не возвращает? – Lucifer

+0

Вы должны добавить в него оператор возврата. get {return name}. Я предполагаю, что это выражение «var name: String {get}» означает только краткий фрагмент кода. –

ответ

3

Такие предложения, как var name: String { get }, обычно используются в протоколах, не входящих в классы. В протоколе это означает, что реализация должна иметь переменную типа String, которая должна быть как минимум только для чтения (отсюда get). Если бы фигурные скобки были бит { get set }, переменная была бы прочитана.

На самом деле в соответствии с графом Серый ответ, var name: String { get } не будет компилироваться внутри класса.

+0

Отлично, спасибо! Путаница исходила от редактора помощника, когда я преобразовал интерфейс класса Obj-C в Swift, и редактор сгенерировал эту переменную. Теперь я все понимаю. Спасибо! – Lucifer

2

Первый пример кода, строго говоря не имеет смысла. Вы не объявляете такие переменные как класс в классе. (Вы делаете это в таком протоколе.)

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

Смежные вопросы