将一个类赋值给一个名为Swift的常量的操作是什么?

c9qzyr3d  于 2022-10-31  发布在  Swift
关注(0)|答案(1)|浏览(136)

我正在尝试弄清楚委托和协议,并学习教程。它有以下代码:

  1. class SelectTimeViewController: UIViewController, PopupDelegate{
  2. ...
  3. let sb = UIStoryboard(name: "DatePopupViewController", bundle: nil)
  4. let popup = sb.instantiateInitialViewController() as! DatePopupViewController
  5. popup.delegate = self
  6. }

代码中的这一行是什么意思?

  1. let popup = sb.instantiateInitialViewController() as! DatePopupViewController

我知道这里我们创建了一个弹出窗口常量并为其赋值,然后将其转换为DatePopupViewController类。
但这更普遍地意味着什么呢?
1.我们是否创建了DatePopupViewController类的示例?
1.我们是否将DatePopupViewController类中的任何值分配给let弹出窗口?
1.我们是否创建了DatePopupViewController类的副本?
更新:关于#1。
通常,当我们创建一个类的示例时,我们使用以下语法:

  1. constant (or variable) = ClassName (initializer)

例如:

  1. var item = Item(name: "Car")

在这个例子中,语法是不同的。我们没有初始化器(括号)。

  1. let popup = ... DatePopupViewController

在这种情况下,我们可以说已经在这里创建了类的示例吗?

dgjrabp2

dgjrabp21#

您的故事板有一个或多个场景。每个场景都由一个view controller管理。通常您会为每个场景创建一个自定义的UIViewController子类。在故事板编辑器中,为每个场景键入该自定义类的名称。
故事板中的一个场景可以标记为“初始场景”。UIStoryboard有一个方法instantiateInitialViewController,可以从故事板中加载该场景。
但是世界上有很多很多故事板,它们使用很多不同的自定义UIViewController子类作为场景。你甚至可以在一个应用程序中有多个故事板,每个故事板都有一个使用不同自定义子类的初始场景。
在编译时,UIStoryboard无法知道instantiateInitialViewController要加载什么类,它只知道要加载UIViewController,或者UIViewController的子类,所以instantiateInitialViewController声明为返回UIViewController
但是当你写代码的时候,你通常知道它要加载哪个子类,而且你经常想做一些依赖于子类的事情。在你发布的代码中,你设置了一个名为delegate的属性,这是一个特定于DatePopupViewController的属性,而不是UIViewController的属性。
为了访问delegate属性,你需要告诉Swift你所知道的Swift还不知道的东西,你需要告诉Swift你正在加载一个DatePopupViewController,你可以使用一个名为“cast”的语法来完成这个任务:

  1. let popup = sb.instantiateInitialViewController() as! DatePopupViewController
  2. | | | This method returns a | The subclass you know
  3. | | | UIViewController object. It | you're loading.
  4. | | | might be (and usually is) a |
  5. | | | subclass of UIViewController. The cast operator.
  6. | | | The ! means the program
  7. | | This variable references will crash if the
  8. | | a UIStoryboard object, loaded object is not
  9. | | which represents a an instance of
  10. | | storyboard at runtime. DatePopupViewController.
  11. | |
  12. | This variable gets bound to the
  13. | newly-loaded DatePopupViewController.
  14. |
  15. This says that the popup variable cannot
  16. be changed to point at a different
  17. instance of DatePopupViewController.
展开查看全部

相关问题