swift开发app开发Swift 与 OC 比较

OC和Swift中delegate与block的反向传值

2017-05-27  本文已影响108人  乡水情缘

对于初学者来说delegate或block都不是一下子能理解的,所以我的建议和体会就是,理不理解咱先不说,我先把这个格式记住,对就是格式,delegate或block都是高度格式化的,用的多了自然而然不理解也就理解了
场景:从 B -> A 传值,开发中必不可少的业务需求,经常会有在B页面干完一些事情之后告诉A页面或者传值到A页面。

本文主要简单说明一OC和Swift 中的 delegate和block
1.block的书写对比
2.delagete的书写对比

第一个问题:block的使用(oc的代码的1和2是写在.h中的)

1.首先在B的controller中声明

//swift
typealias TestBlock = (String,String)->Void
//oc
typedef void (^block)(NSString *str1,NSString *str2);

2.在B的controller中定义这个block

//swift
var block: TestBlock?
//oc
@property (copy, nonatomic) block bolck;

3.在B的controller里面调用这个block

//swift
self.block!("我是第一个参数","我是第二个参数");
//oc
self.bolck(@"第一个参数", @"第二个参数");

4.在A的controller里面监测B中block传递的值

//swift
let vc = SecondViewController();
        vc.block = {
            
            (str1: String,str2:String) -> Void in

              print(str1+str2)
         }
//oc
vc.bolck = ^(NSString *str1,NSString *str2){
        NSLog(@"%@==%@",str1,str2);
    };
第二个问题:delegate 的使用

1.首先在B的controller中定义一个协议

//swift
protocol TestDelaget {
    
  func testDelagetMethod(str:String) ->Void
    
}
//oc
@protocol ViewControllerDelagete

@optional
- (void)testDelagete:(NSString *)str;
@end

2.在B的controller中声明这个delegate

//swift
var delegate: TestDelaget?
//oc
@property (assign, nonatomic) id delagete;

3.在B的controller中调用

//swift
 self.delegate?.testDelagetMethod(str: "这个代理传递的值");
//oc
if ([self.delagete respondsToSelector:@selector(testDelagete:)]) {
        [self.delagete testDelagete:@"我是代理传递的值"];
    }

3.在A的controller中实现方法(别忘了设置代理)

//swift
func testDelagetMethod(str: String) {
         print("test delegate---\(str)")
    }
//oc
- (void)testDelagete:(NSString *)str{
    NSLog(@"%@",str);
}

注:
1.swift 的demo下载地址:https://github.com/xiaoshunliang/SwiftTestBlock
2.OC的demo下载地址https://github.com/xiaoshunliang/OcTestBlock
想了解更多适合新手的内容可以关注下面的团队号(名字都是浮云,内容才是重点)

订阅号.jpg
上一篇下一篇

猜你喜欢

热点阅读