疑问: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
相关产品推荐
相关产品推荐

