Свойство наследующего класса - PullRequest
0 голосов
/ 13 апреля 2019

Простите, если название сбивает с толку или глупо, но я немного запутался в этом

var logInUser : User!

Это код logInUser является свойством, а User является классом модели, что меня смущаетЭто свойство, наследующее класс модели, или это что-то еще, и почему мы его принудительно разворачиваем?Теперь через LogInUser мы можем получить доступ ко всем свойствам User класса модели

.

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

В строке, которую вы разместили выше, говорится, что у вашего типа есть свойство с именем logInUser. Свойство имеет тип User. Поэтому, если вы получите доступ к этому свойству, у вас будет объект типа User, и вы сможете работать с ним как таковым. Если, например, ваш тип User имеет свойство с именем firstName, вы можете получить доступ к этому свойству, например, var userFirstName = logInUser.firstName.

Точка объяснения (!) Означает, что ваша переменная logInUser является неявно развернутой необязательной. Это означает, что вы говорите компилятору «эта переменная, хотя и является необязательной, ВСЕГДА должна быть принудительно развернута при обращении». Несмотря на то, что свойство является необязательным, вам не нужно использовать if / let связывания или принудительного развертывания для доступа к нему. Если у вас есть доступ к свойству и оно равно nil, вы получите сбой во время выполнения.

0 голосов
/ 13 апреля 2019

1) В этом утверждении нет наследования, все происходит просто:

Модель представляет собой представление реальных / воображаемых вещей в небольшом мире простыми способами.Это означает, что модель «Пользователь» представляет пользователя приложения и содержит все, что необходимо для этого представления.

Например, что нужно, чтобы пользователь однозначно распознал системный Email / username или оба, например.Очевидно, что модель может содержать что-нибудь полезное, например, чтобы сделать заказ, модель должна содержать даже адрес.

Теперь важно то, что модель - это просто модель, и это означает, что вы можете использовать эту модель.буквально создавать пользователей в вашей системе / приложении.

Чтобы написать что-то вроде

   var loginUser: User

Может быть, в случае приложения iOS в контроллере представления означает, что контроллер должензнать, кто является пользователем, который использует приложение.

Итак, loginUser - это переменная, представляющая экземпляр модели User, что означает, что loginUser is-a User, а не его наследование.

Более технически, в вашем случае, если ваш User класс (модель) содержит, например, свойство email, вы можете получить доступ к этому электронному письму с помощьюнаберите logInUser.email и сделайте что-то вроде показа или использования его для аутентификации и т. д.

Обратите внимание, что я использовал работу class, которая на самом деле является моделью, тогда как logInUser являетсяобъект, который является instance класса, то есть конкретизация класса.Это означает, что вы можете иметь несколько объектов одного и того же класса, представляющих разных пользователей, например: var adminUser: User, var customerUser: User, var loggedInUser: User, которые являются разными пользователями с разной информацией, и поэтому они являются разными экземплярами одного и того же класса.

checkэто объяснение программирования объекта

2) Восклицательный знак - это принудительное развертывание, это означает, что пользователь может или не может существовать, и ему не нужна его инициализация в init, потому что это может быть nil (но вы должны указать правильное значение, чтобы использовать его), что означает «несуществующий».На самом деле, запись var someV: User? говорит, что ваша переменная может содержать тип User или значение nil.

Разница вашей записи с ! от

  var logInUser: User?

в том, что когда вы используете переменную, если вы объявили ее с !, вы можете использовать ее, не разворачивая ее:

  func someFunction(){
    var email = logInUser.email
  }

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

Если вы использовали вместо него ?, вам нужно развернуть его:

  func someFunction(){
    var email = logInUser?.email
    // OR 
    var email2 = logInUser!.email
  }

Разница в предыдущем использовании logInUser заключается в том, что logInUser?.email может вернуть nil, в то время как logInUser!.email попытайтесь принудительно развернуть, и если это не удастся, ваше приложение упадет.

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