2015-11-13 10:06:44 lvdezhou 阅读数 1579
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

1、oc工程调用swift-----自动创建桥接头文件

创建一个oc工程:


设置Product Module Name = 工程名



创建一个swift文件:

点击自动创建桥接头文件:



设置Objective-C Bridging Header 如下图:



至此,我们可以在oc中调用swift了

测试代码:


import Foundation

class Student: NSObject {
    var name : String = "dzl"
    var age : Int = 22
}

在oc中引入头文件  "工程名-swift.h" 就可以使用swift中的类了

注:这个头文件是不可见的

#import "ViewController.h"

#import "OCuseSwift1-swift.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    Student * s1 = [[Student alloc] init];
    NSLog(@"%@", s1.name);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

输出:

2015-11-13 10:01:32.250 OCuseSwift1[1040:20007] dzl

此时swift也是可以引用OC的,只需将swift需要使用的oc类头文件在桥接头文件中引入即可,






2、oc工程调用swift-----手动创建桥接头文件


首先创建一个oc工程,与上面相同

然后创建一个swift文件,但是不选择创建桥接头文件,如图:



然后手动创建桥接头文件,就相当于创建一个普通的头文件一样,只是命名一定要严格按照规则:



工程设置中指定桥接头文件:


经测试,oc引用swift或者swift引用oc都是可以的,测试方法与上面相同,这里不再赘述。



3、swift工程调用-----自动创建桥接头文件 和 手动创建桥接头文件,基本与上面操作一直,不再详述




其实桥接头文件里面引入oc头文件,是为了swift可以访问oc文件,

在oc中引入   工程名-swift.h   文件  是为了oc可以访问swift,但这个文件是不可见的,不过可以通过command+鼠标左键查看该文件



2016-08-04 10:49:59 a12041543 阅读数 589
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

最近在做一个XXX项目,需要将swift项目转成OC,这里就遇到了一些大大小小的麻烦了


回到正题,问题起源,在我将native端的数据传到web端的时候,发现,我的数据怎么不能被解析。提示unexpect object,于是各种断点打起来,最终定位到问题代码在上传前一刻还是正确的,于是定位到 数据格式错误

简单来说就是,web端需要解析一个JSON 数据的字符串,而我传里一个NSDictionary的字符串。


问题解决后,也是将两个字符串做了一个比较,后面自己打印出来看,好像肉眼也能发现他们之间的不同 -0-




    NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"0",@"errorCode",@"成功",@"errorMessage",result,@"result", nil];

在这部分使用了一个SBJSON的方法,SBJSON文件也上传在附件中了(上传资源时总失败,有需要的私聊我把,百度也可以找到)
    NSString *stringJSON = [dic JSONRepresentation];
    NSString *stringDictionary = [NSString stringWithFormat:@"%@",dic];

 if ([stringJSON isEqualToString:stringDictionary]) {
        NSLog(@"相同");
    }else {
        NSLog(@"不同");
    }
    self.responseCallback(stringJSON);
    self.actionObject = nil;

2018-07-20 16:19:07 kaiyuanheshang 阅读数 2825
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

Swift 调用 OC

Swift 调用 OC 分为两种常见情况,一种是直接在 Application 的 project 中使用;另一种情况是,在 framework 开发中使用。

对于互相调用的原理,如下图所示,更详细的内容可以参考 《Using Swif with Cocoa and Objective-C》

这里写图片描述

图 一

其中最关键的就是三个文件 bridging header(app)、umbrella header(framework)、generated header(swift to OC)。所以主要工作就在于如何生成和指定这些文件。

Application

在一个 Swift 开发的工程中可以通过两种方法来生成桥接文件。

第一种是,直接拖拽 OC 文件到工程中,此时系统会询问是否生成桥接文件,如图:

这里写图片描述

选择 “Create Bridging Header” Xcode 就会自动生成桥接需要的文件和修改相关配置。

另外一种方式是自己指定。桥接文件的命名方式为:ProjectName-Bridging-Header.h,所以先按照这个格式生成一个头文件,然后在 “Build Settings” -> “Swift Compiler - General” -> “Objective-C Bridging Header” 处指定桥接头。

设置完成后,只要在桥接头中引用相应的 OC 文件就可以在工程中的 Swift 文件中使用对应的 OC 类和方法。

framework

framework 中不允许使用桥接头的方式(即不允许指定 “Objective-C Bridging Header” 的值)。在新建一个 framework 的 Project 时,会自动生成一个同名的头文件。比如新建一个工程为 DuAR 的fraework,会自动生成 DuAR.h 文件,这个文件就是 “umbrella header”,如果在这个工程中用到了 OC 源文件或者 OC 写的三方库,就可以在这里引入对应的头文件,从而实现工程中的 Swift 可以使用 OC 类和方法。

关于 “umbrella header” 还有一个叫 “umbrella framework” 的东西,可以实现 A framework 包含 B framework,但是这种方式不推荐使用。具体请搜索。

OC call Swift

在我们新建完一个 Swift 工程的时候,“Swift Compiler - General” 里会有一个叫做 “Objective-C Generated Interface Header Name” 的选项,这个选项里的值为 “ProjectName-Swift.h”,这个文件就是系统生成的 Swift 文件对应的 Objective-C 的头文件。

当在 OC 文件中调用 Swift 文件中的类的时候,首先在 OC 文件中引用上面提到的头文件,即 #import "ProjectName-Swift.h"。这个文件虽然在工程中看不到,但是她真实存在,编译后,你可以按住Command+单击该文件名,就会看到具体生成的代码。
引入后,具体类的使用,直接按照OC的方式使用即可。

这个方法适用于 Application 工程和 framework 工程。

注意事项

相比于 OC 的灵活和强大的运行时,Swift 强调更高的安全性。所以 Swift 的运行时很弱,强类型等特点使得未声明为支持 OC 的 Swift 类和方法是不能通过桥接的方式在 OC 文件中使用的。

如果需要一个 Swift 的类或方法在 OC中可以使用,则必须通过标记的形式告知编译器,即图一中的 @class,同时还有 @objc 等。或者这个类可以直接继承自 NSObject 或其子类,这样也能实现 Swift 类或方法在 OC 中被调用。

Swift 中有许多 OC 没有的特性。比如,Swift 有元组、特有的枚举等。这些特性也不能够在 OC 中使用。所以,要使用的混编文件要注意 Swift 独有属性问题。

2016-06-03 18:38:48 zhonggaorong 阅读数 7068
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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


1. swift与oc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解。

2. 在swift与OC混编的编译环境下, oc类不能访问swift创建类中的代理?

解决方法如下:



在代理的头部加上 @objc(代理名字),这样就在外部就可以访问了,如下图。 然后就和oc中的代理一样,写上协议方法,就可以进行你想要的操作了。



3. swift中的回调方法介绍:

   1. 通过代理 ,写法大家可以看上面的两张图片,和oc代理差不多。

   2. 通过闭包来实现oc中代码块(Block)的方法,来进行代码回调

       2.1 定义  (swift类)

      

      2.2 调用   (swift类)

    

     2.3 具体回调处:(OC - 类)

     


本文持续更新, 看oc与swift 混编有哪些雷,需要我们踩

2016-08-03 01:01:32 CodeImage 阅读数 177
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

    2848 人正在学习 去看看 任苹蜻
Swift与OC的比较

Swift和OC混用

阅读数 972

Swift与OC 混编

阅读数 329

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