为什么我不能在我的 Swift 项目中访问我的视图控制器的委托 属性?
Why can't I access the delegate property of my view controller in my Swift project?
我有一个名为 ServiceDetailController
的视图控制器,其委托 属性 如下所示:
weak var delegate: ServiceDetailControllerDelegate?
我正在尝试使用导航堆栈中的下一个视图控制器中的委托实例初始化它:
for controller in navigationController!.viewControllers as Array {
if controller.isKind(of: ServiceDetailController.self) {
controller.delegate = self
}
}
但是 Xcode 给我一个错误
Value of type 'UIViewController" has no member 'delegate'.
感谢收到的任何帮助。
您的代码在运行 if 语句之后的代码之前确认控制器的类型为 ServiceDetailController
,但在 if 语句中,变量 controller
的类型仍然为 ViewController. (实际上,由于您将 navigationController!.viewControllers
转换为 Array
,controller
可能是 Any
类型。我会从您的 for 循环中删除 as Array
位。弊大于利。)
您需要将变量转换为正确的类型才能访问特定子类的属性。按如下方式更改您的代码:
for controller in navigationController!.viewControllers {
if let sdc = controller as? ServiceDetailController {
sdc.delegate = self
}
}
if let
语法称为“可选绑定”,并在 if 语句的大括号内创建一个新变量,如果 if let
成功则该变量有效。在我们的例子中,我们使用 as?
来尝试将视图控制器转换为类型 ServiceDetailController
。如果转换成功,则执行大括号内的代码,并可以访问类型为 ServiceDetailController
.
的变量 sdc
我有一个名为 ServiceDetailController
的视图控制器,其委托 属性 如下所示:
weak var delegate: ServiceDetailControllerDelegate?
我正在尝试使用导航堆栈中的下一个视图控制器中的委托实例初始化它:
for controller in navigationController!.viewControllers as Array {
if controller.isKind(of: ServiceDetailController.self) {
controller.delegate = self
}
}
但是 Xcode 给我一个错误
Value of type 'UIViewController" has no member 'delegate'.
感谢收到的任何帮助。
您的代码在运行 if 语句之后的代码之前确认控制器的类型为 ServiceDetailController
,但在 if 语句中,变量 controller
的类型仍然为 ViewController. (实际上,由于您将 navigationController!.viewControllers
转换为 Array
,controller
可能是 Any
类型。我会从您的 for 循环中删除 as Array
位。弊大于利。)
您需要将变量转换为正确的类型才能访问特定子类的属性。按如下方式更改您的代码:
for controller in navigationController!.viewControllers {
if let sdc = controller as? ServiceDetailController {
sdc.delegate = self
}
}
if let
语法称为“可选绑定”,并在 if 语句的大括号内创建一个新变量,如果 if let
成功则该变量有效。在我们的例子中,我们使用 as?
来尝试将视图控制器转换为类型 ServiceDetailController
。如果转换成功,则执行大括号内的代码,并可以访问类型为 ServiceDetailController
.
sdc