oc跳转swift_oc和swift相互跳转 - CSDN
  • 该项目主要介绍了ocswift之间、swift内部几种常见的传值方式(属性传值、代码块传值、代理传值、通知) 如果ocswift之间的桥接有疑问请参考:OCswift桥接互调 项目介绍 1、swift之间的页面跳转与返回...

    该项目主要介绍了oc与swift之间、swift内部几种常见的传值方式(属性传值、代码块传值、代理传值、通知)

    如果oc与swift之间的桥接有疑问请参考:OC与swift桥接互调

    项目介绍

    • 1、swift之间的页面跳转与返回
    • 2、oc监听swift推送的通知
    • 3、swift内部推送接收的通知
    • 4、oc调用swift的代理方法
    • 5、swift调用oc代码块
    • 6、oc对swift的属性传值、方法调用、代码块调用
    • 7、swift对oc的属性传值、方法调用、代码块调用
    • 8、swift之间的传值

    1、swift之间的页面跳转与返回

    1、present方式跳转

     @objc func btnAction(_ sender:UIButton){
            let subVC  = SubVC();
            self.present(subVC, animated: true) {
                NSLog("������:%@", subVC);
            };
            NSLog("������:%@____%@",sender,self);
        }

    2、返回

    self.dismiss(animated: true) {
                    NSLog("返回");
                };

    2、oc监听swift推送的通知:

    • swift发送通知
     func postNotifition(){
            NotificationCenter.default.post(name: NSNotification.Name(rawValue: "XMNotification"), object: "通知方法");
        }
    • oc接收通知
    -(void)addNotification{
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notiAction:) name:@"XMNotification" object:nil];
    }
    
    -(void)notiAction:(NSNotification *)sender{
        NSLog(@"oc:%@",sender.object);
    }
    
    -(void)removeNotification{
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"XMNotification" object:nil];
    }
    

    3、swift内部推送接收的通知:

     func postNotifition(){
            NotificationCenter.default.post(name: NSNotification.Name(rawValue: "XMNotification"), object: "通知方法");
        }
    
        @objc func addNotification(){
            NotificationCenter.default.addObserver(self, selector: #selector(notificationAction(_:)), name: NSNotification.Name(rawValue: "XMNotification"), object: nil);
        }
        @objc func removeNotifition() {
            NotificationCenter.default.removeObserver(self);
        }
    
        @objc private func notificationAction(_ noti : Notification){
            let str:String = noti.object as! String;
            print("swift:" + str);
        }

    通知打印结果

    4、oc调用swift的代理方法:

    • 编辑协议方
    ///1、编辑协议
    @objc(FourVCDelegate)
    protocol FourVCDelegate {
        func backSuperVC(str:String)
    }
    
    ///2、定义协议对象
    @objc var myDelegate:FourVCDelegate?;
    
    ///3、调用协议
    let str:String = "代理方法"
    self.myDelegate?.backSuperVC(str: str);
    • 签署协议方
    ///1、调用协议
    @interface FirVC ()<FourVCDelegate>
    
    ///2、签署协议
    -(SecVC *)seVc{
        if (!_seVc) {
            _seVc = [SecVC new];
            _seVc.myDelegate = self;
        }
        return _seVc;
    }
    
    ///3、协议实现
    -(void)backSuperVCWithStr:(NSString *)str{
        NSLog(@"%@", str);
    }
    

    代理协议打印结果

    5、swift调用oc代码块

    • oc文件类
    ///代码块定义
    @property(nonatomic,strong)void (^thiBlock)(NSString *str);
    
    ///代码块实现
    !self.thiBlock?:self.thiBlock(@"swift调用oc代码块");
    • swift文件类
    
    let vc  = ThiVC();
    ///代码块调用
    vc.thiBlock = {(str) -> () in
        print("代码块方法");
    }
    
    self.present(vc, animated: true, completion: {
    
    });

    提示

    6、oc对swift的属性传值、方法调用、代码块调用

    • swift方法类
    import UIKit
    
    class FourVC: UIViewController {
    
        ///数组
        @objc var arr0:NSArray = NSArray()
    
        ///无参数无返回值
        @objc func swMethod0(){
            print("无参数无返回值");
        }
        ///有参数无返回值
        @objc func swMethod1(str: String)  {
            print("有参数无返回值:\(str)");
        }
        ///有参数有返回值
        @objc func swMethod2(str: String) -> (String){
            return "有参数有返回值:" + str;
        }
    
        /// mark - 代码块
        ///无返回参数
        @objc func bkBlock0(response:() -> ()){
            response();
        }
        ///返回一个字符串参数
        @objc func bkBlock1(response:(_ res : String) -> ()) {
            response("返回一个字符串参数");
        }
        ///返回多个任意类型参数
        @objc func bkBlock_2_(response:(_ res : Any,_ res1 : Any) -> ()) {
            response(self.arr0, "无参数,返回多个任意类型参数:");
        }
        ///传入多个参数 并返回多个任意类型的参数
        @objc func bkBlock3(p1:Any,p2:Any,p3:Any,res:(_ res0 : Any ,_ res1 : Any ,_ res2:Any,_ res3:Any) -> ()) {
            res("传入多个参数 并返回多个任意类型的参数:\n",p1, p2, p3);
        }
        ///Block带返回值
        @objc func bkBlock4(res:() -> ()) -> (String){
            res();
            return "Block带返回值"
        }
    
    
        //定义block
        typealias fucBlock = (_ backMsg : String?) ->()
        func bkBlock4(cmdStr:String?,blockProperty:fucBlock){
            blockProperty("backMsg---by block inside func")
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.view.backgroundColor = UIColor.yellow;
            print("属性传值结果:",self.arr0[0],self.arr0[1],arr0[2]);
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            self.dismiss(animated: true) {
    
            };
        }
    }
    
    • oc方法类:
        FourVC *vc = [FourVC new];
        // --- 属性传值 ---
        vc.arr0 = @[@"可以",@"可以",@"可以"];
    
        /// ------ 方法调用 -----
    
        //无参数无返回值
        [vc swMethod0];
        //有参数无返回值
        [vc swMethod1WithStr:@"dasda"];
        //有参数有返回值
        NSString *str = [vc swMethod2WithStr:@"sdfasda"];
        NSLog(@"%@",str);
    
        /// ------ 代码块调用 -----
    
        [vc bkBlock0WithResponse:^{
            NSLog(@"无返回数据代码块");
        }];
    
        //有一个返回值
        [vc bkBlock1WithResponse:^(NSString * str) {
            NSLog(@"%@", str);
        }];
    
        //有两个返回值
        [vc bkBlock_2_WithResponse:^(id str, id str1) {
            NSLog(@"%@\n%@",str1,str);
        }];
    
        //有参数有返回值
        [vc bkBlock3WithP1:@"ds" p2:@"dsa" p3:@"das" res:^(id p0,id p1, id p2, id p3) {
            NSLog(@"%@\n%@\n%@\n%@",p0,p1,p2,p3);
        }];
    
        [self presentViewController:vc animated:YES completion:^{
    
        }];
    

    此处输入图片的描述

    7、swift对oc的属性传值、方法调用、代码块调用

    • xxx.h文件
    @interface OcVC : UIViewController
    ///代码块
    @property(nonatomic,strong)void (^clickBlock)(void);
    ///字符串
    @property(nonatomic,copy)NSString *titStr;
    ///方法
    -(void)testAction;
    @end
    
    • xxx.m文件
    - (void)viewDidLoad {
        [super viewDidLoad];
        NSLog(@"%@",self.titStr);
        !self.clickBlock?:self.clickBlock();
    }
    
    -(void)testAction{
        NSLog(@"调用方法");
    }
    
      xxx.swift文件
    
    let sub  = OcVC();
    //属性传值
    sub.titStr = "属性传值";
    //方法调用
    sub.testAction();
    
    //代码块调用
    sub.clickBlock = { () -> () in
         print("不带参数代码块")
    };
    
    sub.clickBlock();
    self.present(sub, animated: true, completion: {
    
    });

    打印结果

    8、swift之间的传值

        func jumpToNextVC(){
            ///mark - =============
            let foVC =  FourVC()
    
            let dic:NSDictionary = ["key":1,"key1":2];
            let arr0:NSMutableArray = ["你好","好不好"];
    
            // mark -  属性传值
            foVC.arr0 = arr0;
    
            //方法调用
            foVC.swMethod0();
            foVC.swMethod1(str: "da");
            let str = foVC.swMethod2(str: "ddd");
            print(str);
    
            // mark -  代码块回调
            foVC.bkBlock0 {
                print("你可以的");
            };
            foVC.bkBlock1 { (res) in
                print(res);
            }
            foVC.bkBlock_2_{ (res, str) in
                print(res, "+", str);
            }
            foVC.bkBlock3(p1: "1", p2: "2", p3: "3") { (res0, res1, res2, res3) in
                print(res0,res1,res2,res3);
            }
            self.present(foVC, animated: true) {
    
            };
        }

    原文地址:https://blog.csdn.net/weixin_38633659/article/details/81569207

    展开全文
  • OCswift混编中的相互跳转和传值

    前段时间在开发项目中遇到了OC和swift混编的情况,下面就相互跳转和传值分享一下自己的经验:


    1.OC----> swift

    首先要在OC中引用swift头文件,写法是 #import "(项目名)-swift.h"

    跳转:

    swiftClearViewController *VC = [[swiftClearViewController alloc]init];

    [self.navigationController pushViewController:VC animated:YES];

    当需要传值时首先要在swift中定义变量

    然后就可以正常的进行传值了


    2.swift---->OC

    还是要引用头文件,这里的方法是创建桥接头文件,具体方法不再赘述

    跳转和传值和上面类似


    展开全文
  • OCSwift互相跳转

    2017-12-09 18:44:49
    欢迎访问我的个人博客 首先在需要引入Swift的文件中...OC跳转Swift页面: #import "ViewController.h" #import "OCAndSwift-Swift.h" // 引入头文件@interface ViewController ()@end@implementation ViewController-

    欢迎访问我的个人博客

    首先在需要引入Swift的文件中导入头文件#import "工程名-Swift.h"

    • OC跳转Swift页面:
    #import "ViewController.h"
    #import "OCAndSwift-Swift.h"        // 引入头文件
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (IBAction)btnClicked:(id)sender {
    
        // Swift文件
        ChildViewController *vc = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil];
    
        [self.navigationController pushViewController:vc animated:YES];
    
    }
    • Swift跳转OC页面:

    首先创建Swift文件的时候回创建一个工程名-Bridging-Header.h文件,在这个文件中将需要用到的OC文件导入到这里!!!

    import UIKit
    
    class ChildViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Do any additional setup after loading the view.
        }
    
        @IBAction func btnClicked(_ sender: Any) {
            let twoVC = ChildTwoViewController(nibName:"ChildTwoViewController", bundle: nil)
    
            self.navigationController?.pushViewController(twoVC, animated: true)
    
    
        }

    哈哈,大功告成!!!

    展开全文
  • 碰到一个swift的项目,博主要用OC来进行重构,但是考虑到时间的问题,里面几大功能模块打算直接抑制到项目里,这里要考虑SwiftOC之间界面的互相跳转,也是混编。 Swift中使用OC使用桥接文件,可以查看...

    碰到一个swift的项目,博主要用OC来进行重构,但是考虑到时间的问题,里面几大功能模块打算直接抑制到项目里,这里要考虑Swift和OC之间界面的互相跳转,也是混编。
    Swift中使用OC使用桥接文件,可以查看http://blog.csdn.net/codingfire/article/details/51880516

    在OC中使用Swift文件博主还真不知道,查了下,具体说明如下:

    假设我有一个类:ViewController.swift
    我要使用这个类里面的方法,或者饮用类名跳转,
    需要在OC类中引入头文件:#import "工程名-Swift.h",就是工程名加上“-Swift.h”.
    

    混编之后即可按照OC的用法来使用了。
    查看细节可下载Demo:点击下载

    展开全文
  • UIViewController的跳转,可以在Storyboard里面通过拖拽Segue进行跳转,也可以在代码中进行跳转.本文分别介绍这2种方式.1:Storyboard的方式 跳转,传递参数 首先选中 一个Button –> 按住 control 键–> 然后拖拽到...
  • 最新一些学妹问起,所以抽点时间来写的,适合入门级别的swiftOC 混编 的程序猿。 本文章将从两个方向分别介绍 OCswift 混编 1. 第一个方向从 swift工程 中引入 oc类   1. 1 如何在swift的类中使用...
  • oc调用swift

    2015-11-14 18:05:06
    如果你想在Objective-C工程中,嵌入Swift文件,实现OC调用Swift,那么这篇文章就能帮助你,由于本人最近在开发Swift项目,所以实现过OC调用Swift,在这过程中遇到过一些瓶颈,特此,将此文奉上,供大家参考。...
  • 目前正在学习中,只知道三种界面跳转方式 1、通过Main.storyboard 用鼠标拖拽控件到需要跳转的页面,选择 Present Modally 实现界面跳转 2、跳转到Main.storyboard 创建了 View Controller 关联代码ViewController...
  • oc 调用 swift Demo

    2016-02-04 16:41:59
    https://github.com/xiangyangzhang/OC_Call_Swift 源码
  • OCswift的数据传输

    2018-08-10 20:02:33
    该项目主要介绍了ocswift之间、swift内部几种常见的传值方式(属性传值、代码块传值、代理传值、通知) 如果ocswift之间的桥接有疑问请参考:OCswift桥接互调 项目介绍 1、swift之间的页面跳转与返回...
  • 接上篇文章:iOS 快速从OC过渡到Swift,由理论到实战-Swift基础 OCSwift混编 a. SwiftOC 的映射关系 Swift 兼容来大部分 OC,当然还有一些 Swift 不能够使用的,例如 OC 中的预处理指令,即宏定义不可...
  • 如何新建:一般情况,在Swift工程中新建一个OC类,或者在OC工程新建一个Swift类,系统就会提示你是否创建,选择是就行了,然后再删除你刚刚创建的无用文件。如下图(在OC工程中创建的): 如果你选择了取消,可能下一...
  • OCswift3.1混编

    2017-05-22 18:09:27
    自从2015年7月,本人写了第一篇swift的文章到现在已经很久没有更新关于swift的内容。 每当swift1 -> swift2 -> swift3的时候都有一股莫名的... swift的学习学了不用,进步始终是甚微的。还是要在真正的项目中使用才...
  • 一、OC调用swift文件  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定创建桥接文件,Xcode会自动创建一个桥接文件 名字:工程名-Bridging-Header.h 这个桥接文件是 swift...
  • 1.OC —— > swift 首先要在OC中引用swift头文件,写法是 #import "(项目名)-swift.h" 跳转swiftViewController * VC = [[swiftViewController alloc]init]; [self.navigationController ...
  • 本文旨在帮助开发者快速从OC开发过渡到Swift开发,挑选了一些比较浅显的但是比较常用的Swift语法特性,在介绍的过程中,通常会拿OC中的语言特性作比较,让大家更好的注意到Swift的不同。 另外需要说明的是,笔者也...
  • 1新建类选择Swift 的时候, 会出现是否选择生成类似这样的头文件, 选择生成,(用于Swift类调用Oc的类使用的) 2 在Oc的类中声明 工程的名字加上-Swift.h 类似 3 接下来进入下一个界面的方法就都一样啦。 ...
1 2 3 4 5 ... 20
收藏数 1,915
精华内容 766
热门标签
关键字:

oc跳转swift