gpt4 book ai didi

ios - Obj-C 中的委托(delegate)方法签名,了解它们的 C# 等价物是什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:30:24 25 4
gpt4 key购买 nike

我正在学习 Objective C。我正在尝试找到与 C# 中的方法签名等效的内容。

我对 UIViewControllerDelegate 的以下签名感到困惑

- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation

- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc

那么,在 C# 中,这相当于具有不同重载签名的 2 个方法名称 splitViewController?

这很令人困惑,因为这些方法非常具有描述性......

举第一个例子:

splitViewController 是方法的名称,vc 和 orientation 是我们传递给它的参数。 shouldHideViewController 和 inOrientation 是在 UISplitViewDelegate .h 声明中声明的参数名称。

是的,我对这个吗?只是想确认我正在正确学习,并且我已经掌握了这里的概念。

当人们提到第一个方法时,他们将其称为 splitViewController:shouldHideViewController:inOrientation这对来自 C# 的我来说很奇怪,因为我们只是通过方法名称来引用一个方法,并理解它有多个重载。另外,在 Obj-C 中,这些不同的“重载”确实处理完全不同的事情,这对我来说是一个策略范例。

任何想法...

最佳答案

- (BOOL) splitViewController:(UISplitViewController *)svc 
shouldHideViewController:(UIViewController *)vc
inOrientation:(UIInterfaceOrientation)orientation

方法名称:splitViewController:shouldHideViewController:inOrientation:
参数名称:svcvcorientation

Objective-C 没有方法重载。您的代码显示了两种不同的方法。

in Obj-C these different "overloads" do handle different things entirely, which is a strage paradigm for me.

这里的范例是委托(delegate),这是一种通过依赖另一个类来扩展类行为的方式。

考虑这个虚构的 API:

@interface TableDelegate
-(CGFloat)heightForRow:(NSUInteger)row;
@end

@interface Table
@property (weak) id<TableDelegate> delegate;
@end

这是一个具有委托(delegate)属性的表对象。在建表时,它会询问委托(delegate)人每行的高度应该是多少。

@interface Controller <TableDelegate>{
Table _table;
}
@end

@implementation Controller
-(instancetype)init {
if (self=[super init]){
_table = [Table new];
_table.delegate = self;
}
return self;
}
-(CGFloat)heightForRow:(NSUInteger)row {
return 10.f;
}
@end

那是一个管理表对象的 Controller 。它声明自己符合协议(protocol)并将自己设置为表的委托(delegate)。现在您可以添加您认为合适的任何逻辑来返回给定行的高度(在示例中它返回一个固定值)。

我们不必子类化,我们可以只实现我们感兴趣的委托(delegate)方法。

关于ios - Obj-C 中的委托(delegate)方法签名,了解它们的 C# 等价物是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16388119/

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