You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

疑问:storyboard是否为UIViewController的属性?求答疑

关于UIViewController的storyboard属性的疑问解答

我完全理解你的困惑——一边是苹果官方文档明确标注UIViewController有storyboard属性,另一边又有人说它不是控制器的属性/特性,这确实容易让人迷糊。咱们一步步拆解清楚:

首先,明确事实:UIViewController确实有公开的storyboard属性

苹果在UIViewController的官方文档里,确实定义了这个可选只读属性:

var storyboard: UIStoryboard? { get }

它的作用是返回当前控制器所属的故事板实例——当你从某个storyboard文件里实例化控制器时,系统会自动把该storyboard的引用赋值给这个属性。比如你通过storyboard.instantiateViewController(withIdentifier:)创建控制器后,就能通过vc.storyboard拿到对应的UIStoryboard对象。

那为什么会有“The storyboard isn't a property or an attribute of either UIViewController”这种说法?

评论里的观点大概率是从概念关系或者**属性的“固有性”**角度出发的,核心原因有两个:

  • 所有权逻辑倒置:并不是UIViewController“拥有”storyboard,反而是storyboard作为一个包含多个控制器场景的资源容器,是它创建了控制器。控制器的storyboard属性只是一个对其来源容器的引用,而非控制器自身的“固有组成部分”。
  • 属性并非始终有效:如果控制器是纯代码创建的(比如直接UIViewController()),那么它的storyboard属性会是nil。这个属性只有在控制器从storyboard实例化时才会被赋值,所以它不是所有UIViewController实例都具备的“必备属性”。

简单来说,评论者的表述可能有点不够精准,但想表达的核心是:storyboard不是UIViewController的固有、必备属性,只是一个运行时根据创建方式可能被赋值的引用。

总结

  • 从API层面:UIViewController确实有storyboard这个公开属性,官方文档的描述完全正确。
  • 从概念层面:storyboard是控制器的来源容器,控制器只是持有它的引用,而非“拥有”它;且这个属性并非所有控制器实例都有有效值。

这样就能把两边的观点统一起来啦~

内容的提问来源于stack exchange,提问作者Laurence Wingo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:34:18