gpt4 book ai didi

ios - 澄清 UIViewController *_variable; iAdSuite 选项卡式示例 (iOS) 中的声明

转载 作者:行者123 更新时间:2023-12-01 16:58:04 26 4
gpt4 key购买 nike

从 Apples iADSuite 选项卡式示例中,有一个用委托(delegate)定义的变量。

UIViewController<BannerViewContainer> *_currentController;

后来它被这样转换
_currentController = (UIViewController<BannerViewContainer> *)_tabBarController.selectedViewController;

在声明中使用“BannerViewContainer”有什么意义,它与后来的类型转换有什么关系,以及这里的幕后发生了什么?

问候

吉姆

最佳答案

这里与委托(delegate)无关。 BannerViewContainerprotocol . (您可能会感到困惑,因为委托(delegate)通常是通过协议(protocol)定义的。)

用尖括号协议(protocol)名称声明变量或参数意味着分配给它的任何内容都必须是符合该协议(protocol)的对象:如果您尝试传递 UIViewController 的实例或其某个子类,除非该实例属于 UIViewController,否则您将收到编译器警告。声明符合 BannerViewContainer 的子类协议(protocol)。 (也就是说,如果它的头文件读取 FooViewController,您可以传递 @interface FooViewController : UIViewController <BannerViewContainer> 的实例。)

您稍后看到的转换遵循与许多转换相同的模式:程序员知道他分配的对象满足该变量的要求,但他使用的引用没有匹配的声明。也就是标签栏 Controller 只知道它选择的 View Controller 是一个UIViewController (或其任何子类),但程序员知道他放入标签栏的 View 都是UIViewController符合 BannerViewContainer 的子类协议(protocol)。

关于ios - 澄清 UIViewController<Delegate> *_variable; iAdSuite 选项卡式示例 (iOS) 中的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com