• SwiftOC混编

    2020-05-18 16:24:31
    SwiftOC混编,OC项目下Swift和OC的互相调用Swift项目下Swift和OC的相互调用
  • OC调用SwiftOC调用Swift方法比较简单。但是需要注意以下几点: 1.需要在当前OC类里导入xxx-Swift.h头文件,其中xxx为项目名称(与你的项目配置相关,具体配置方式见上一篇文章) 2.OC类里仅可以调用public的Swift...

    原创文章转载请注明出处。

    背景


    在上一篇文章swift与OC混编(创建混编工程)中简单讲述了怎么创建Swift和OC的混编工程。本篇讲一下Swift和OC的混编工程中的方法调用。

    OC调用Swift


    OC调用Swift方法比较简单。但是需要注意以下几点:

    • 1.需要在当前OC类里导入xxx-Swift.h头文件,其中xxx为项目名称(与你的项目配置相关,具体配置方式见上一篇文章)

    • 2.OC类里仅可以调用public的Swift方法和变量

    • 3.Swift类最好用@objc(xxx)进行描述

    暂时想到这几点,如有疏漏请留言指出,不胜感激。

    剩下的调用方式就和普通的OC之间调用方式类似了。

    OC调用Swift实例方法


    继续用上一篇文章的例子进行说明,例如在ViewController.m类里调用Swift的logMe实例方法,就可以这么写:

    SwiftDemo* demo = [[SwiftDemo alloc] init];
    [demo logMe];
    

    OC调用Swift静态方法


    首先先在SwiftDemo.swift文件中声明一个静态方法:

    public static func swiftStaticFunc(log: NSString) {
        print(log);
    }
    

    然后回到ViewController.m类里调用该方法(记得编译一下才可以吆~)

    桐乡的,调用方式和OC之间的调用类似:

    [SwiftDemo swiftStaticFunc:@"oc call swift static func"];
    

    Swift调用OC


    前一篇文中也已经说过需要有一个桥接文件Swift才可以调用OC相关方法以及属性等,这里不再赘述,忘记了的可以再回去看一下。

    Swift调用OC实例方法


    其实前面文中已经举例说明了调用方法。这里再简单重复一下。

    在SwiftDemo.swift类里调用ViewController.m类里的logYou方法,swift调用代码如下:

    let vc = ViewController()
    vc.logYou()
    

    声明一个变量vc,也就是ViewController的实例对象。然后用vc对象调用实例方法logYou。

    Swift调用OC多参方法


    首先先在ViewController.h中声明一个OC的多参方法:

    - (void) logMe:(NSString*)logMe logYou:(NSString*)logYou;
    

    在.m文件中进行一下实现:

    - (void)logMe:(NSString *)logMe logYou:(NSString *)logYou {
        NSLog(@"%@--%@", logMe, logYou);
    }
    

    在SwiftDemo.swift文件中调用方法如下:

    vc.logMe("log me", logYou: "log you")
    

    方法从第一个参数开始都要写在括号里。

    Swift调用OC静态方法


    首先先在ViewController.h中声明一个OC的静态方法:

    + (void) ocStaticFunc:(NSString*)log;
    

    然后在.m文件中简单些一下实现:

    + (void)ocStaticFunc:(NSString *)log {
        NSLog(@"%@", log);
    }
    

    回到SwiftDemo.swift文件中,用swift调用OC的静态方法。

    ViewController.ocStaticFunc("swift call oc static func")
    

    Swift调用OC变参方法


    在某些需求情景下,需要用到变参函数。简单举个例子:

    + (void) stringParams:(NSString*)params,...;
    

    这种例子在系统函数中也可以见到。比如常用的NSString的一个方法:

    - (instancetype)initWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
    

    OC的调用方法就不再重复了。这里说一下Swift怎么调用OC的变参方法。

    首先,Swift不能直接调用OC的变参方法

    如果必须要用到,则需要对函数进行简单修改。

    拿上面刚说到的stringParams:方法举例。

    需要把方法的写法改为:

    + (void) stringParams:(NSString*)params args:(va_list)args;
    

    函数的具体实现:

    + (void) stringParams:(NSString *)params args:(va_list)args {
    
        va_list args_copy;
    
        __va_copy(args_copy,args);
        NSMutableString* format = [NSMutableString stringWithString:@""];
        while (va_arg(args, NSString*))
        {
            [format appendString:@"%@,"];
        }
        va_end(args);
    
        if(format.length>0)
            [format deleteCharactersInRange:NSMakeRange(format.length-1,1)];
    
        NSString* newFormat = [NSString stringWithFormat:@"%@",format];
        NSString * result = [[NSString alloc]initWithFormat:newFormat arguments:args_copy];
        va_end(args_copy);
        NSLog(@"%@", result);
    }
    

    在Swift中的调用方式:

    let args: [CVarArgType] = ["i'm", " showhilllee"]
        withVaList(args) {
            (pointer: CVaListPointer) in
            return ViewController.stringParams("%@,%@", args:pointer)
        }
    

    当然,还有其他方式来实现。可以尝试找一下方法。

    结语


    本文Demo可以在【这里】下载到

    —End—

    展开全文
  • OC Swift 混编

    2017-08-30 13:29:01
    首先承认我落后了,到今天才开始在项目里用swift,而且还不是全部的用,只是ocswift混编,因为实在是进入项目的时候框架已经用oc搭好了啊啊啊啊啊。只能退而求其次,混编了,大致根据百度到的方法试了一下,不是很...

    首先承认我落后了,到今天才开始在项目里用swift,而且还不是全部的用,只是oc和swift混编,因为实在是进入项目的时候框架已经用oc搭好了啊啊啊啊啊。
    只能退而求其次,混编了,大致根据百度到的方法试了一下,不是很难,总结起来就是两点:
    一、oc工程混编swift文件
    1.新建swift文件,首次新建的时候会提示是否创建桥接文件,选择创建,不要修改文件的名字,一般默认是 工程名+“-Bridging-Header.h”,这是swift调用oc的时候用到的,只要按照oc的方法把oc类的头文件导进来就好了,像这样

    #import "XXXXXXXX.h"

    然后在swift文件就可以调用oc了

    2.上面是swift调用oc,至于oc怎么调用swift就更简单了,创建swift文件的时候系统会自动创建Swift文件对应的Objective-C的头文件,一般默认为 工程名+“-Swift.h”,一般不做改动,而且平时你也看不到这个文件,只有导入了这个头文件,然后点进去,你才能看到文件的内容,如果写头文件时候不提示,clean一下。。。
    (注:如果过程中出现不提示或者编译不通过的情况,clean一下试试,一般就没问题了,如果还有问题,一定是上面还有哪没做好,请重试)
    二、swift工程混编oc文件
    还没有尝试,待续。。。

    展开全文
  • OCSwift是苹果爸爸的原生语言,Swift代替OC的成本太高,需要过度和时间,但是现在的Swift的成长很快,在这个矛盾的时间,我们必须混编了。 1、创建一个新的工程 ,工程的名字叫OCAndSwiftDemo。 2、配置工程...

    OC和Swift是苹果爸爸的原生语言,Swift代替OC的成本太高,需要过度和时间,但是现在的Swift的成长很快,在这个矛盾的时间,我们必须混编了。

    1、创建一个新的工程 ,工程的名字叫OCAndSwiftDemo。

     

    2、配置工程

    3创建swift 类

    1在工程左侧列表右击,选中new file 

    一直next到创建成功,最后一个按钮是create

    这个按钮一定要点,这是oc和swift的桥接文件,

    点击完上面的按钮就会有这个文件这是我写的

    3TestDemo类的代码

    4、viewController类的代码

    总结:

    swift调用oc: 需要在统一的bridge头文件(xxx-Bridging-Header.h)里面import,然后即可使用。

    oc调用swift: 需要在暴露出来的方法和属性上加@objc否则不可用;且文件的类需要继承自NSObject或NSObject的子类。

     

    参考:

    https://www.jianshu.com/p/2ed48b954612

    官方文档链接: 
    https://developer.apple.com/documentation/swift 

     

    奉上demo:https://download.csdn.net/download/flying_in_the_world/10979726

    展开全文
  • OCSwift混编

    2016-01-26 10:16:30
    Swift发展势头越来越好,而很多公司很难一下子从OC全部切换到swift,这个时候混编就显得那么的重要,本人也在逐渐的尝试混编然后逐步取代OC,从而全部转到swift上。 其实,从2014年swift刚出来的时候就开始研究swift...

    Swift发展势头越来越好,而很多公司很难一下子从OC全部切换到swift,这个时候混编就显得那么的重要,本人也在逐渐的尝试混编然后逐步取代OC,从而全部转到swift上。

    其实,从2014年swift刚出来的时候就开始研究swift的相关语法及定义了,但是由于公司很难转变,所以一直也没有运用到实践当中,这个时候就非常佩服那些小公司,或者应该叫初创公司,没有任何的烦恼,新开发的app都是运用swift。。。非常羡慕。。。

    好了,废话不多说,看看用法吧。。

    首先,我们有一个OC项目的工程,我这边叫MixDemo,这个时候需要新增一个swift的类,与添加OC类一样,只是选择的语言选择swift。


    由于我的工程是OC的工程,添加一个swift文件的时候,苹果会问开发者要不要添加一个bridge,我们需要添加这样一个桥接。


    这个时候我们会看到我们的工程里面多了一个MixDemo-Bridging-Header.h的文件

    我们在swift文件中添加一个方法,返回一个字符串:

    class Test4SwiftVC: NSObject {
        func f1() -> String {
            return "Test Mix"
        }
    }
    那么问题来了,如何在OC的.m文件中调用该方法呢?

    我们先看看工程文件里面的build Settings:

    看到红色标注出来的地方,默认是工程名称-Swift.h,我们自定义为SwiftModule-Swift.h,以方以后修改工程名称的时候出错。这个文件就是我们在OC类中调用swift类的引用头文件,这个类在工程中看不到,但是我们可以Command+点击查看这个类的内容:


    此时需要将工程Clean下,然后在OC的实现文件中,引用该头文件,即可调用swift中的类了:

    - (void)viewDidLoad {
        [super viewDidLoad];
        Test4SwiftVC *VC = [[Test4SwiftVC alloc] init];
        [VC f1];
        // Do any additional setup after loading the view, typically from a nib.
    }
    这样我们就可以在OC中调用swift中的f1方法了。


    那么在swift中怎么调用OC的方法或者变量呢?

    我们在ViewController中定义一个字符串:

    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController
    @property (strong, nonatomic) NSString *str;
    
    @end

    还记得我们一个的桥接文件么?似乎我们还没用到吧,这个时候就派上用场了。

    我们在MixDemo-Bridging-Header.h中添加OC的头文件:

    #import "ViewController.h"

    然后在swift文件中就可以引用啦。。。

    func f2() {
            var vc = ViewController()
            var str: String = vc.str
        }

    我们在swift中定义了第二个函数,定义一个变量vc去初始化ViewController这个类,然后定义一个String类型的变量来接收OC类中的参数,这样就可以互相调用啦,调用OC中的函数也是同样的道理,大家可以自己去研究。。。





    展开全文
  • 最新一些学妹问起,所以抽点时间来写的,适合入门级别的swiftOC 混编 的程序猿。 本文章将从两个方向分别介绍 OCswift 混编 1. 第一个方向从 swift工程 中引入 oc类   1. 1 如何在swift的类中使用...
    
    

    目录(?)[+]

    最新一些学妹问起,所以抽点时间来写的,适合入门级别的swift 与 OC 混编 的程序猿。  

    本文章将从两个方向分别介绍 OC 与 swift 混编  


    1. 第一个方向从 swift工程 中引入 oc类 

        1. 1 如何在swift的类中使用oc类
        1.2  如何在swift中实现oc的代理方法
        1.3   如何在swift中实现oc的Block回调

    2. 第二个方向从OC工程中引入swift类

        2.1  如何在OC类中使用swift类
        2.2   如何在OC中实现swift的代理方法
        2.3   如何在OC中实现swift中类似Block回调


    下面是具体的实现过程:

     1.1  如何在swift的类中使用oc类? 

    1.  Swift工程中引入OC类。 具体实现过程。

        1.1 新建一个swift工程类。 取名 swiftOrOC

        1.2  实现的功能为 :  从swift. viewController.swift 中 push到 OC语言 secondViewController 控制器

    1.2.1  新建SecondViewController 类 。

            

         1.2.2 建立桥接文件。 (很重要)


        一定要记得点击这个按钮。 

           1.2.3  接下来工程目录如下:

           

         1.2.4 接下来就可以实现具体的跳转功能了。 

          ViewController.swift中具体实现

         

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. import UIKit  
    2.   
    3. class ViewController: UIViewController {  
    4.   
    5.     @IBOutlet weak var hintLabel: UILabel!  //稍后用来显示回调  
    6.       
    7.     // push 到 oc controller  
    8.     @IBAction func pushAction(_ sender: AnyObject) {  
    9.         let secondVC = SecondViewController.init()  
    10.         self.navigationController?.pushViewController(secondVC, animatedtrue)  
    11.     }  
    12.       
    13.     override func viewDidLoad() {  
    14.         super.viewDidLoad()  
    15.         // Do any additional setup after loading the view, typically from a nib.  
    16.     }  
    17.   
    18.     override func didReceiveMemoryWarning() {  
    19.         super.didReceiveMemoryWarning()  
    20.         // Dispose of any resources that can be recreated.  
    21.     }  
    22.   
    23.   
    24. }  


    1.2 如何在swift中实现oc的代理方法

           1.2.1 首先在 SecondViewController.h 中声明一个协议。具体代码

            

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #import <UIKit/UIKit.h>  
    2.   
    3. @protocol SecondDelegate <NSObject>  
    4.   
    5. -(void)refreshHintLabel:(NSString *)hintString;  
    6.   
    7. @end  
    8.   
    9. @interface SecondViewController : UIViewController  
    10.   
    11. @property (nonatomic,weak)id<SecondDelegate> secondDelegate;  
    12. @end  
         1.2.2 然后在SecondViewController.m中,通过一个UITextField,让用户输入内容,当用户点击返回的时候把输入框中的内容返回给对应的代理。具体代码如下

        

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #import "SecondViewController.h"  
    2. #import "UIViewController+BackButtonHandler.h"  
    3.   
    4. @interface SecondViewController ()  
    5. {  
    6.     UITextField *textField;  
    7. }  
    8. @end  
    9.   
    10. @implementation SecondViewController  
    11.   
    12. - (void)viewDidLoad {  
    13.     [super viewDidLoad];  
    14.     self.title = @"oc";  
    15.       
    16.     self.view.backgroundColor  = [UIColor whiteColor];  
    17.       
    18.     textField = [[UITextField alloc]initWithFrame:CGRectMake(100100200200)];  
    19.     textField.placeholder = @"请输入用户名";  
    20.     [self.view addSubview:textField];  
    21.     [textField.layer setBorderColor:[UIColor blackColor].CGColor];  
    22.     [textField.layer setBorderWidth:1.0];  
    23.   
    24.       
    25. }  
    26.   
    27. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{  
    28.     [self.view endEditing:YES];  
    29. }  
    30. #pragma mark 返回上一页回调 ,将用户输入的用户名传回给 ViewController.swift  
    31. -(BOOL)navigationShouldPopOnBackButton{  
    32.     if ([_secondDelegate respondsToSelector:@selector(refreshHintLabel:)]) {  
    33.         [_secondDelegate refreshHintLabel: textField.text];  
    34.     }  
    35.       
    36.     return YES;  
    37. }  
    38.   
    39.   
    40. - (void)didReceiveMemoryWarning {  
    41.     [super didReceiveMemoryWarning];  
    42.     // Dispose of any resources that can be recreated.  
    43. }  
    44.   
    45. /* 
    46. #pragma mark - Navigation 
    47.  
    48. // In a storyboard-based application, you will often want to do a little preparation before navigation 
    49. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    50.     // Get the new view controller using [segue destinationViewController]. 
    51.     // Pass the selected object to the new view controller. 
    52. } 
    53. */  
    54.   
    55. @end  
      1.2.3 接下来就非常简单了,让ViewController.swift只需要成为SecondViewController的代理,然后遵循她的协议,就可以了。 具体代码如下。

           1.2.3.1 遵循协议

      

         1.2.3.2 成为代理,并实现协议方法,更改controller.swift中hintLabel的text。

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. // push 到 oc controller  
    2. @IBAction func pushAction(_ sender: AnyObject) {  
    3.     let secondVC = SecondViewController.init()  
    4.     secondVC.secondDelegate = self;  
    5.     self.navigationController?.pushViewController(secondVC, animatedtrue)  
    6. }  
    7.   
    8. // SecondViewControll的代理方法  
    9. func refreshHintLabel(_ hintString: String!) {  
    10.     hintLabel.text = "secondView textView.text = " + hintString;  
    11. }  

     1.3   如何在swift中实现oc的Block回调

    1.3.1 具体过程与1.2小节一样。 直接上代码。

            1.3.2 声明block;

             

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. typedef void(^RefreshHintLabelBlock)(NSString *hintString);  
    2.   
    3. @interface SecondViewController : UIViewController  
    4. @property (nonatomiccopy) RefreshHintLabelBlock hintBlock;  
    5. @end  

            1.3.3 block的回调。 SecondViewController.m中

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #pragma mark 返回上一页回调 ,将用户输入的用户名传回给 ViewController.swift  
    2. -(BOOL)navigationShouldPopOnBackButton{      
    3.     if (_hintBlock) {  
    4.         _hintBlock(textField.text);  
    5.     }  
    6.     return YES;  
    7. }  

            1.3.4 在swift类中调用 oc的block.

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. // push 到 oc controller  
    2. @IBAction func pushAction(_ sender: AnyObject) {  
    3.     let secondVC = SecondViewController.init()  
    4.       secondVC.secondDelegate = self;  
    5.     secondVC.hintBlock = {(t:String?)in  
    6.         self.hintLabel.text = "secondView textView.text = " + t!  
    7.     }  
    8.     self.navigationController?.pushViewController(secondVC, animatedtrue)  
    9. }  


       工程已上传到Git上,git地址: https://github.com/zhonggaorong/SwiftOrOc/tree/master

    2.  OC工程中引入swift类。 具体实现过程。

        耽误了不少时间, 今天才开始写oc工程中引入swift类。

        demo地址: 

      

         2.1  如何在OC类中使用swift类


           2.1.1   新建一个基于OC语言的工程 ,取名 OcOrSwiftTwo
           2.1. 2  实现的功能为 : 从oc类 viewcontroller中, push 至 swift语言 SecondViewController  ,然后SecondViewController可以通过代理或者swift闭包把值传回viewcontroller. 
           2.1.3   当前文件目录看下图:  (第四个箭头: 桥接文件)
            
      
        2.2   如何在OC中实现swift的代理与闭包Block方法
                
        2.2.1 如何在oc中引入swift类。#import "工程名-swift.h"
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #import "OcOrSwiftTwo-swift.h"  
       2.2.2 在secondViewController.swift 中实现代理与闭包,代码如下:
        注意: @objc(代理名)  才能在外部可见这个代理
     
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. import UIKit  
    2. import Foundation  
    3.   
    4. // 必须加上@objc 代理才能在oc类中可见。  
    5. @objc(EditTextFieldDelegate)  
    6. protocol EditTextFieldDelegate:NSObjectProtocol {  
    7.     func editTextField(_ str: String) -> Void  
    8. }  
    9.   
    10. @objc(SecondViewController)  
    11. class SecondViewController: UIViewController {  
    12.   
    13.     var editorDelegate:EditTextFieldDelegate?  
    14.     var textField:UITextField?  
    15.     var addButton:UIButton?  
    16.     var pushButton:UIButton?  
    17.       
    18.     typealias editorBlock = (_ t:String) -> Void  
    19.     var myEidtorBlock:editorBlock?  
    20.       
    21.     override func viewDidLoad() {  
    22.         super.viewDidLoad()  
    23.         self.view.backgroundColor = UIColor.white  
    24.         textField = UITextField.init(frame: CGRect.init(x: 50, y60, width200, height50))  
    25.         textField?.placeholder = "输入返回首页的内容"  
    26.         self.view.addSubview(textField!)  
    27.           
    28.         addButton = UIButton.init(type: .custom)  
    29.         addButton?.setTitleColor(UIColor.black, for.normal)  
    30.         addButton?.setTitle("pop", for.normal)  
    31.         addButton?.frame = CGRect.init(x: 50, y150, width200, height50)  
    32.         addButton?.layer.borderColor = UIColor.black.cgColor  
    33.         addButton?.layer.borderWidth = 1.0  
    34.         addButton?.addTarget(self, action: #selector(popAction), for.touchUpInside)  
    35.         self.view.addSubview(addButton!)  
    36.           
    37.           
    38.           
    39.         pushButton = UIButton.init(type: .custom)  
    40.         pushButton?.setTitleColor(UIColor.black, for.normal)  
    41.         pushButton?.setTitle("push", for.normal)  
    42.         pushButton?.frame = CGRect.init(x: 50, y250, width200, height50)  
    43.         pushButton?.layer.borderColor = UIColor.black.cgColor  
    44.         pushButton?.layer.borderWidth = 1.0  
    45.         pushButton?.addTarget(self, action: #selector(pushAction), for.touchUpInside)  
    46.         self.view.addSubview(pushButton!)  
    47.           
    48.     }  
    49.       
    50.     func popAction() -> Void {  
    51.           
    52.         if editorDelegate != nil {  
    53.             editorDelegate?.editTextField((textField?.text)!)  
    54.         }  
    55.           
    56.         if ((self.myEidtorBlock) != nil){  
    57.             self.myEidtorBlock!((textField?.text!)!)  
    58.         }  
    59.           
    60.         self.navigationController?.popViewController(animated: true)  
    61.     }  
    62.       
    63.       
    64.     func pushAction() -> Void {  
    65.         let three = ThreeViewController.init()  
    66.         self.navigationController?.pushViewController(three, animatedtrue)  
    67.           
    68.     }       
        2.2.3   在oc类中viewcontroller.m 文件中实现SecondviewController.swift的相关代理与闭包(block). 代码如下:
       
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #import "ViewController.h"  
    2. #import "OcOrSwiftTwo-swift.h"  
    3.   
    4. @interface ViewController ()<EditTextFieldDelegate>  
    5. @property (nonatomicstrongUITextField *showTextField;  
    6. @property (nonatomicstrongUIButton *pushButton;  
    7.   
    8. @end  
    9.   
    10. @implementation ViewController  
    11.   
    12. - (void)viewDidLoad {  
    13.     [super viewDidLoad];  
    14.     _showTextField = [[UITextField alloc]initWithFrame:CGRectMake(50100 , 20050)];  
    15.     _showTextField.placeholder = @"swift传回的文本内容";  
    16.     _showTextField.adjustsFontSizeToFitWidth = YES;  
    17.     _showTextField.enabled = NO;  
    18.     [self.view addSubview:_showTextField];  
    19.       
    20.     _pushButton = [UIButton buttonWithType:UIButtonTypeCustom];  
    21.     [_pushButton.layer setBorderColor:[UIColor blackColor].CGColor];  
    22.     [_pushButton.layer setBorderWidth:1.0];  
    23.     [_pushButton setFrame:CGRectMake(5020020050)];  
    24.     [_pushButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];  
    25.     [_pushButton setTitle:@"push" forState:UIControlStateNormal];  
    26.     [_pushButton addTarget:self action:@selector(pushAction) forControlEvents:UIControlEventTouchUpInside];  
    27.       
    28.     [self.view addSubview:_pushButton];  
    29. }  
    30.   
    31.   
    32.   
    33.   
    34. -(void)pushAction{  
    35.     SecondViewController *second = [[SecondViewController alloc]init];  
    36.     // second.editorDelegate = self;  
    37.       
    38.     /* 
    39.       swift中的闭包回滴 
    40.      */  
    41.     second.myEidtorBlock = ^(NSString *str) {  
    42.         _showTextField.text = [NSString stringWithFormat:@"second传回信息: %@",str];  
    43.     };  
    44.     [self.navigationController pushViewController:second animated:YES];  
    45. }  
    46.   
    47. #pragma mark swift中的代理  
    48. -(void)editTextField:(NSString *)str{  
    49.     _showTextField.text = [NSString stringWithFormat:@"second传回信息: %@",str];  
    50. }  
    51.   
    52. - (void)didReceiveMemoryWarning {  
    53.     [super didReceiveMemoryWarning];  
    54.     // Dispose of any resources that can be recreated.  
    55. }  

    展开全文
  • OCSwift混编.pdf

    2020-06-03 23:32:33
    OC混编Swift, Swift项目混编Objective-C Framework Target混编。 Swift 怎么遵循 OC运行时 混编的一些坑
  • 1. swiftoc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解。 2. 在swiftOC混编的编译环境下, oc类不能访问swift创建类中的代理? 解决方法如下: 在代理的头部加上 @objc(代理...
  • 说起这个话题,在我看来,比项目中的OC混编C++,C等简单些,毕竟OC和Swift都是苹果自己的开发语言,API什么的都一样,还是更容易混合开发些,好了,废话不多说,切正题,OC与Swift怎么混和开发呢?OC类中可以引入...
  • Swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好...这里主要介绍swift类中调用OC方法和swift类中调用C函数以及OC类中调用swift的函数这三种类型的混编.
  • swiftOC进行混合编码。
  • 概述 Swift的设计的初衷就是摆脱...随着Swift的改进及Swift开源项目剧增,越来越多的Objective-C工程开始使用Swift混编,不管是在基于Swift工程中或者Objective-C工程中,Swift和Objective-C文件都可以无缝结合。本文
  • WWDC推出了SwiftUI、Combine,仅Swift可用~为了能顺利的也吃上SwiftUI,我也打算将自己的项目先从OC慢慢迁移到Swift,所以~一起从混编开始! 创建Swift的view 正常创建文件,语言选swift 创建Bridging Header 上...
  • 之前在开发是遇到了在OC文件中调用Swift对象的变量调用不到的问题,这里总结一下: 1.首先我们一个Swift项目TestProject。 2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量...
  • 随着Swift的日益完善,终究会取代OC的地位,就像Kotlin取代Java一样,不是时间的问题,而是使用者愿意不愿意被时代淘汰的问题首先是Swift中定义闭包
  • 最近由于项目需求需要使用Swift做开发,但之前的好多有用的东西都是使用OC写的,鉴于这种情况最好的方式当然是使用swift重写,但这样的工作量太大,而且不能保证功能的稳定性,所以自己就尝试的使用Framework来嵌入...
  • oc与swift混编OC调用swift,swift调用OC
  • OCSwift混编的过程中有很多的细节需要注意。 今天介绍一下在OC文件中声明了一个枚举类型,如何在Swift文件中调用该枚举类型的值。 1.项目工程构建的时候选的是Swift语言,项目名称TestProject。 2.建立一个...
1 2 3 4 5 ... 20
收藏数 1,118
精华内容 447