zoukankan      html  css  js  c++  java
  • OC项目中使用Swift

    OC项目中使用Swift

    本文版权归作者所有,如需转载请联系孟祥月
    CSDN博客:http://blog.csdn.net/mengxiangyue
    独立博客:http://mengxiangyue.com

    近期公司的项目開始计划使用Swift,因为原先的project都是使用OC编写的,不可能一下所有转换成Swift。所以採用OC与Swift混编的方式是最好的选择。这篇文章仅仅是一个简单的介绍,并没有太高深的知识。

    我新建了一个演示的OCproject,当然你能够使用你已经存在的OC的project。假设我们想要在OCproject中使用Swift的代码,Swift的代码默认是使用module管理的,相同这里我们也须要把我们的Swift代码作为一个module暴露给我们的OCproject,改动以下的配置:

    上面的改动了一个配置项,有一个Product Module Name在后面会使用。

    在project里面点击File/New/File…,选择iOS/Source/Cocoa Touch Class,依照例如以下填写创建一个新的文件:

    上图中的Subclass of一定要设置为NSObject或其子类。否则OCproject将不会找到该类。

    点击确认后会选择保存路径,点击Create。出现例如以下界面:

    这个界面是询问是否创建桥接的头文件,这个文件在Swift调用OC代码的时候比較管用,可是在OC中调用Swift的时候我发现没有什么卵用。

    选择Don’t Createbutton。

    在Test.swift中加入例如以下的代码(解释都在凝视里面了):

    import UIKit
    
    /*
        假设Swift类想要被OC发现,必须继承自NSObject而且使用public标记,而且该类中想要被OC訪问的方法也必须使用public标记,详细知识能够去看Swift的訪问控制
        原因:Swift的代码对于OC来说是作为一个module存在的
    
        当然全局的Swift函数,我还没发现怎么在OC中訪问,假设哪位清楚还请告诉一下,谢谢!

    */ public class Test: NSObject { public func log() { print("这是Swift的方法") } } public func globalLog() { print("这是Swift全局的log方法") }

    我们在我们想要调用Swift类的方法里面引入头文件:”Product Module Name-Swift.h”,当中Product Module Name替换成在上面配置项中显示的内容。比如:

    #import "ViewController.h"
    // 引入Swift头文件
    #import "OCAndSwift-Swift.h"
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 使用Swift的类
        Test *test = [[Test alloc] init];
        [test log];
    }
    
    @end

    这样我们就能够在OC中使用Swift的代码了,最后还要说明一点:”Product Module Name-Swift.h”(样例中的是OCAndSwift-Swift.h),是由编译器自己主动生成的,假设import后没有提示。编译一下。

    而且仅仅有在project中包括至少一个Swift文件的时候。才会自己主动生成这个文件,所以假设project中假设没有Swift文件的时候,就算在配置中设置对了,import该文件也会报错。

  • 相关阅读:
    鸟哥linux私房菜学习笔记,U盘安装centos5.3不能正常进入图形界面的问题
    loadrunner11的移动端性能测试之脚本录制
    JVM(java 虚拟机)内存设置
    数据结构一元多项式加减乘
    数据结构顺序表
    数据结构栈
    LoadIcon(nFaceID[i])
    数据结构单链表
    mysql得到wenshell
    窗口背景刷新的问题
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7097101.html
Copyright © 2011-2022 走看看