2016-02-27 09:23:30 mengxiangyue 阅读数 32373
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻

OC项目中使用Swift

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

最近公司的项目开始计划使用Swift,由于原先的工程都是使用OC编写的,不可能一下全部转换成Swift,所以采用OC与Swift混编的方式是最好的选择。这篇文章只是一个简单的介绍,并没有太高深的知识。

我新建了一个演示的OC工程,当然你可以使用你已经存在的OC的工程。如果我们想要在OC工程中使用Swift的代码,Swift的代码默认是使用module管理的,同样这里我们也需要把我们的Swift代码作为一个module暴露给我们的OC工程,修改下面的配置:

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

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

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

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

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

选择Don’t Create按钮。

在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后没有提示,编译一下。并且只有在工程中包含至少一个Swift文件的时候,才会自动生成这个文件,所以如果工程中如果没有Swift文件的时候,就算在配置中设置对了,import该文件也会报错。

2016-02-14 14:15:37 iOS_wq 阅读数 5856
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻

OC项目引入Swift方法

在OC项目中,有可能会遇到需要引入Swift写的第三方库,下面整理下OC项目如何使用Swift库

1.在已有的OC工程中新建一个Swift文件,命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h”




















2. 配置工程

设置Defines Module 为Yes


设置Product Module Name 为当前工程名 (有时系统会自动为我们设置好)


此时系统会为工程创建一个“工程名-Swift.h”的文件(不会显示出来,可以引用),此文件不可手动创建,必须使用系统创建的

3.测试是否成功

新建一个Swift文件,写一个Swift的函数

import UIKit

class Test1: NSObject {

    func show()
    {
        print("hello baby!")
    }
}

在OC工程里调用该函数


成功!

以后在使用的地方直接引用"工程名-Swift.h",不需要引用Swift文件














2018-01-15 15:20:38 jinrui_w 阅读数 1942
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻

OC项目引入使用swift编写的三方库后,报错

  • 错误描述:The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor.
  • 解决办法
    1. 选中Pods项目
    2. TARGETS选择对应的使用swift编写的三方库
    3. 切换到Build Setting选项
    4. 在搜索框输入swift language搜索
    5. 将Swift Language Version中的Unspecified改为对应的Swift版本(Swift 3.2)
    6. 重新build项目,这是可能会报一些Swift的语法错误,修改一下就OK了。
      Alt text
2019-03-21 15:53:16 liuyong0214 阅读数 154
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻

项目中有这个需求,查看了很多资料,自己再Mark一下:

1、如果项目中没有swift文件,需要创建一个,名字随意,同时会让生成一个(项目名-Bridging-Header.h)的文件,一并生成

2、cocoapod集成所需要的三方库到项目中

3、在pods中找到集成的swift三方库,在Build Settings中搜索swift language version,改成三方库所支持的最高版本

4、点击项目->targets->build settings 搜索module将
     1.enable modules
     2.link frameworks automatically
     两个设置成YES

这样就大功告成

如果想使用自己刚创建的Swift文件,可以在.pch文件中引用头文件#import "项目名-Swift.h"

这个文件是系统自动创建好的,是隐藏的,可以直接引用,这样就可以在OC项目中使用刚创建的Swift文件了

2017-07-18 12:10:31 qq_33298465 阅读数 696
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻

桥接头文件主要应用于swift和oc的混编。这里有两种创建方式。

方法一:

适用于项目(swift项目)之前没创建过oc的类,或(oc的项目)swif的类

这里以swift项目为例

既然没用过就创建一个呗Commond+n然后创建,这是会出来一个提示


选择Create Bridging Header就可以了,这样项目中就有这个桥接头文件了。

在桥接头文件里直接 import “类名.h”就可以使用了。

方式二:

适用于任何情况,想怎么玩怎么玩。

1)common+n选择Header File


然后创建出来,创建出来之后,并不是直接就可以用,需要做另外一步操作。

(1)选择targest

(2)选择buildsetting

(3)搜索bridg,找到如下图地方,更改 格式为 : 项目名/header文件名.h(就是上方创建的Header File文件的名字)如果你的桥接头文件,在项目里一个存在物理路径的文件里,你还要拼上这个文件的名字,比如:你桥接头文件在Commond文件里,它存在物理路径,那么写法则为 项目名/Commond/header文件名.h,什么是物理路径,就是当你showinfind时候,能找到他。多试几遍。




  • 如何导入使用CocoaPods集成的第三方库?这里我用SDWebImage举例

1、#import ".h"之后要设置一个User Header Search Paths,否则在需要用三方库的地方是调不出来的。

在target—>Build Setting里找到search Paths,双击User Header Search Paths后面的空白处,设置目录路径为${SRCROOT}。

${SRCROOT}后边选择recursive递归根目录下的所有文件。




swift调用第三方oc库

阅读数 1058

OC与Swift混合使用

阅读数 575

没有更多推荐了,返回首页