属性继承类

时间:2019-04-13 13:47:55

标签: swift

请原谅我标题混乱或愚蠢但对此不太困惑的人

var logInUser : User!

这是代码logInUser是属性,而User是模型类,现在令我感到困惑的是它是继承模型类的属性还是其他东西,以及为什么我们强制展开它? 现在,通过此LogInUser,我们可以访问User模型类的所有属性

2 个答案:

答案 0 :(得分:1)

您在上面的行中所说的是您的类型具有一个名为logInUser的属性。该属性的类型为User。因此,如果您访问该属性,则将拥有User类型的对象,并且可以像这样使用它。例如,如果您的User类型具有名为firstName的属性,则可以通过说出var userFirstName = logInUser.firstName来访问该属性。

解释点(!)表示您的logInUser变量是隐式展开的可选变量。这意味着您对编译器说:“尽管该变量是可选的,但在访问时应始终对其进行解包”。即使该属性是可选的,您也无需使用if / let绑定或强制展开来访问它。如果您确实访问了该属性,而该属性为nil,则将导致运行时崩溃。

答案 1 :(得分:0)

1)此语句中没有继承,发生的事情很简单:

模型以简单的方式表示了一个小世界中的真实/虚构事物。 这意味着模型“用户”代表应用程序的用户,并包含执行此表示所需的所有内容。

例如,用户需要由系统电子邮件/用户名或两者唯一地识别。显然,一个模型可以包含任何有用的东西,例如为了使该模型甚至应包含地址的订单。

现在,重要的是模型只是一个模型,这意味着您可以使用该模型从字面上在系统/应用程序中创建用户。

写类似的东西

   var loginUser: User

对于iOS应用,也许在视图控制器中,这意味着控制器需要知道谁是使用该应用的用户。

因此,loginUser是代表User模型实例的变量,这意味着loginUser User,而不是它的继承。

从技术上讲,如果您的User类(模型)包含例如属性email,则可以通过键入logInUser.email来访问该电子邮件,并执行类似显示或将其用于身份验证等等。

  

请注意,我使用的作品class实际上是模型,而logInUser是对象,它是 instance 的对象一个类,即该类的具体化。这意味着您可以使同一类的多个对象代表不同的用户,例如:var adminUser: User, var customerUser: User, var loggedInUser: User是具有不同信息的不同用户,因此它们是同一类的不同实例。

选中此object programming explanation

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则尝试强制展开,如果失败,则您的应用程序将崩溃。