关于方向传值那点儿四儿(一)delegate


delegate:代理,为其他对象提供一种代理(协议)以控制对这个对象的访问。

我们来利用代理实现界面间反向传值,减少循环引用,降低耦合。

下面我们上代码来看:

首先:找到我们要提供代理的对象(在界面反向传值中,我们提供代理的对象跳转后的界面,即:反向传值界面)

然后:在.h文件声明协议

@protocol ReverseTheValueDelegate <NSObject>

- (void)reverseUsername:(NSString *)username;

@end


// 声明遵守协议的id类型属性
@property (nonatomic, assign) id<ReverseTheValueDelegate> delegate;

并在界面放回的方法中实现代理传值调用(如下代码 我们传回的是字符串‘666’)

- (void)goBackAction
{
    [self dismissViewControllerAnimated:YES completion:nil];
    if (self.delegate && [self.delegate respondsToSelector:@selector(reverseUsername:)]) {
        [self.delegate reverseUsername:@"666"];
    }
}


最后:我们找到遵守协议(delegate)的对象

有两种遵守协议的方式

// 方式一(在Class Extension遵守协议)
@interface ViewController () <ReverseTheValueDelegate>

@end

// 方式二(在Class Declaration遵守协议)
@interface ViewController : UIViewController <ReverseTheValueDelegate>@end

 之后实现协议中的反向传值的方法获取需要得到的值(如下code 是获取下一界面的username字符串的值) 

#pragma mark - ReverseTheValueDelegate
- (void)reverseUsername:(NSString *)username
{
    NSLog(@"%@", username);
}






在C#中,关于delegate的四种方法可以简要总结如下: 1. 使用delegate关键字声明一个委托类型,然后通过实例化委托类型来创建一个委托实例,最后通过委托实例来调用方法。 2. 使用匿名方法来创建委托实例,匿名方法允许我们在需要的地方内联定义一个方法。 3. 使用Lambda表达式来创建委托实例,Lambda表达式提供了一种简洁的语法形式来定义匿名方法,并且可以自动推断参数的类型。 4. 使用Func、Action和Predicate等预定义的委托类型来创建委托实例,这些预定义的委托类型提供了不同数量和类型的参数,并且可以指定返回值的类型。 总结起来,C#中使用delegate的四种方法是:使用delegate关键字声明委托类型并实例化、使用匿名方法、使用Lambda表达式和使用预定义的委托类型。这些方法都可以用来创建委托实例并调用相应的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C# Delegate讲解](https://download.csdn.net/download/liyangaad/10160723)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C#使用委托(delegate)实现在两个form之间传递数据的方法](https://download.csdn.net/download/weixin_38704565/14868625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C#利用delegate实现Javascript的each方法](https://download.csdn.net/download/weixin_38694541/13990952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值