gpt4 book ai didi

ios - 为什么 UIStoryboardSegue 中的 sourceViewController 属性是 "id"

转载 作者:行者123 更新时间:2023-12-01 16:51:37 25 4
gpt4 key购买 nike

UIStoryboardSegue类、属性sourceViewController显然是 UIViewController .为什么 Apple 将此属性标记为 id ?

@property(nonatomic, readonly) id sourceViewController;
@property(nonatomic, readonly) id destinationViewController;

使用 UIViewController * 会更容易使用或理解吗? , 像
@property(nonatomic, readonly) UIViewController *sourceViewController;
@property(nonatomic, readonly) UIViewController *destinationViewController;

最佳答案

Apple 在这里和许多其他地方使用 id 的原因是允许灵 active 并防止过时。

尽管有属性(property)名称,destinationViewController可能并不总是返回 UIViewController目的。或者更具体地说,Apple 不想重构这些方法,如果一年后他们有一些新的、特殊的 View Controller 不继承自 UIViewController。 .因此,使用 id 可以防止过时。

另请注意,您可能并不总是希望将返回的对象转换为 UIViewController.例如,如果您的 View Controller 嵌入到 UINavigationController将由destinationViewController 返回。虽然 UINavigationControllerUIViewController 的 child ,在大多数情况下,您不想将其转换为这样,因为您通常希望从 viewControllers 中获取其 View Controller 。属性,像这样:

// unwrap the controller if it's embedded in the nav controller.
UIViewController *controller;
if ([segue.destinationViewController isKindOfClass:[UINavigationController class]])
{
UINavigationController *navController =
(UINavigationController *)segue.destinationViewController;

controller = [navController.viewControllers objectAtIndex:0];

} else {

controller = segue.destinationViewController;
}

因此,这种设计为开发人员提供了灵 active 。

关于ios - 为什么 UIStoryboardSegue 中的 sourceViewController 属性是 "id",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15250642/

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