使用 UIViewController 作为可选参数的默认值,但出现 "X does not have a member named Y" 错误
Using a UIViewController as the default value for an optional parameter, but I get the "X does not have a member named Y" error
所以我一直在享受默认参数值。
class containerViewController: UIViewController {
var detailView:UIViewController?
override func viewDidLoad(){
super.viewDidLoad()
detailView = anotherViewController()
}
func hideDetailView(vc:UIViewController? = detailView){ // <- THIS LINE
// code
}
}
我标记的行产生错误:
'containerViewController.Type' does not have a member named 'detailView'
我一直在网上阅读,including this question,但我似乎不知道如何解决这个问题。
我想要的是能够使用 hideDetailView()
,如果我将特定的视图控制器作为参数发送给该函数,它会隐藏该特定的视图控制器。如果我不发送任何参数,它只会隐藏 detailView
参数中保存的当前视图控制器。
我怎样才能做到这一点?
您可以使用nil
作为默认值,并检查正文中是否有nil
。
func hideDetailView(vc:UIViewController? = nil){ // <- THIS LINE
let vc_ = vc ?? detailView
// code
}
但在这种情况下,您无法区分以下调用:
// passing `nil` as Optional<UIViewController>
let vc:UIViewController? = nil
container.hideDetailView(vc: vc)
// use default value
container.hideDetailView()
如果你不喜欢那样,你可以使用 UIViewController??
:
func hideDetailView(vc:UIViewController?? = nil){
let vc_ /*: UIViewController? */ = vc ?? detailView
// code
}
所以我一直在享受默认参数值。
class containerViewController: UIViewController {
var detailView:UIViewController?
override func viewDidLoad(){
super.viewDidLoad()
detailView = anotherViewController()
}
func hideDetailView(vc:UIViewController? = detailView){ // <- THIS LINE
// code
}
}
我标记的行产生错误:
'containerViewController.Type' does not have a member named 'detailView'
我一直在网上阅读,including this question,但我似乎不知道如何解决这个问题。
我想要的是能够使用 hideDetailView()
,如果我将特定的视图控制器作为参数发送给该函数,它会隐藏该特定的视图控制器。如果我不发送任何参数,它只会隐藏 detailView
参数中保存的当前视图控制器。
我怎样才能做到这一点?
您可以使用nil
作为默认值,并检查正文中是否有nil
。
func hideDetailView(vc:UIViewController? = nil){ // <- THIS LINE
let vc_ = vc ?? detailView
// code
}
但在这种情况下,您无法区分以下调用:
// passing `nil` as Optional<UIViewController>
let vc:UIViewController? = nil
container.hideDetailView(vc: vc)
// use default value
container.hideDetailView()
如果你不喜欢那样,你可以使用 UIViewController??
:
func hideDetailView(vc:UIViewController?? = nil){
let vc_ /*: UIViewController? */ = vc ?? detailView
// code
}