Класс наследования свойств

#swift

#swift

Вопрос:

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

 var logInUser : User!
  

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

Комментарии:

1. Прочитайте руководство по программированию Swift: основы . Примерно на 3/4 пути вниз по странице вы найдете раздел о неявно развернутых опциях.

Ответ №1:

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

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

Ответ №2:

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

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

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

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

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

    var loginUser: User
  

Возможно, в случае приложения iOS в контроллере представления это означает, что контроллер должен знать, кто является пользователем, использующим приложение.

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

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

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

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

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

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

   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 попытке принудительно развернуть, и если это не удастся, ваше приложение выйдет из строя.