![](/img/trans.png)
[英]Why is the 'view' property of UIViewController not optional in Swift?
[英]Swift optional or Implicit property on UIViewController subclass
我有以下课程
class Foo : UIViewController {
var demo : SKView
override func viewDidLoad() {
...
self.demo = SKView(...)
...
self.view.insertSubview(demo, atIndex: 0)
}
override func viewWillDisappear(animated : Bool) {
self.demo.removeFromSuperView()
self.demo = nil
}
}
我的问题是,因为我在Foo
上没有初始化器,所以demo必须是?
或者!
。 我读过许多我应该远离使用的地方!
。 但是,在这种情况下,有没有理由不使用它? 由于视图本身将始终在viewDidLoad
上设置并且仅在viewWillDisappear
上取消设置,因此我不是100%明确了解此案例的缺点。
这类课程中这类属性最常见的模式是什么? 在viewDidLoad
设置的属性,并且始终具有值。
原因是Swift强制类成员在初始化时始终具有值。 通过标记变量demo
!
还是?
你告诉编译器这个变量的值可以是nil
,因此是可选的表示法。
在iOS开发环境中,标记SKView
是完全可以接受的!
所以你不必后缀每次调用demo
用?
。
如果demo
为nil
并且您需要始终存在值,那么应用程序将在运行时崩溃,在许多情况下实际上是可取的。
class Foo : UIViewController {
var demo : SKView!
override func viewDidLoad() {
...
self.demo = SKView(...)
...
self.view.insertSubview(demo, atIndex: 0)
}
override func viewWillDisappear(animated : Bool) {
self.demo.removeFromSuperView()
self.demo = nil
}
}
class Foo: UIViewController {
var demo: SKView = SKView()
...
}
100%自Foo()以来不会是零。
或者你可以覆盖init(),但我不喜欢它。 如果我确定我不会在ViewDidLoad()之前使用该属性,我更喜欢在ViewDidLoad()中编写初始化,并标记为var demo: SKView!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.