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代码)。

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

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+鼠标左键查看该文件



2019-03-25 14:27:53 lfdanding 阅读数 82
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

最近在oc工程里要引用swiftMonkeypaws,需要使用oc调用swift技术,里面踩了很多坑,这里简单记录一下。

1、oc调用swift

oc调用swift其实很简单,google一下就有很多的教程,可以参考文章1、2、3、4。总体上就是在要调用swift代码的时候,引入头文件 “模块名-Swift.h”,这个头文件对外不可显示,需要手动导入。可以在 Build setting 中查看:
在这里插入图片描述
现在我们在 OC 中添加这个头文件:
在这里插入图片描述
我们需要查看一下swift到底可以调用那些方法和类。这个时候,我们可以点进这个头文件中去。进入头文件往下拉,可以看到暴露出来的 Swift 的类名和方法:
在这里插入图片描述

2、oc调用swift ,涉及cocoapods

上面完全是主工程里使用当然毫无难度,但是我要引入的swiftMonkeypaws是要以cocoapods方式进行引入,这里面就有很多的问题。

2.1 引入头文件名字不一样

头文件要引入的格式为 #import <产品名/模块名-Swift.h>,参考文章5,我们可以在 Build Settings 中查看:
在这里插入图片描述
2.2、头文件引入的位置
头文件如果引用在pods工程的起点文件中,还是会报找不到头文件的错误,这里面我没有深入研究pods工程的编译原则,但是不难猜出因为是在pods工程的起点文件中,还没有开始编译pod工程里的swift文件,所以就没有生成oc调用swift的接口文件,导致头文件找不到。我这边的临时解决办法就是把头文件引用移动到了其他的位置
在这里插入图片描述

3、oc引用swiftMonkeypaws

oc引用swiftMonkeypaws,网上的文章也很多,可以参考文章6、7、8、9、10。对于参考文章8,矫正一下

var paws: MonkeyPaws?

class MonkeyUIPaws: NSObject 
{        
    @objc public func showMonkeyPawsINUITest ( window: UIWindow ) -> () {
        paws = MonkeyPaws(view: window)    
    }

     @objc class func test() -> () {
        print("test")
    }
}

如果不这么修正,你会收到 unrecognized selector sent to instance,主要原因是因为把MonkeyPaws设置成局部变量以后,这个界面释放以后,MonkeyPaws也被释放,再调用MonkeyPaws的方法就会引发这个错误。所以要把MonkeyPaws设置到类外面。对于unrecognized selector sent to instance这个错误的详细描述可以参考文章11、12。

参考文章:

1、https://blog.csdn.net/studying_ios/article/details/70146879
2、https://www.jianshu.com/p/754396e7e1bd
3、https://www.jianshu.com/p/9f757a09eacd
4、https://www.jianshu.com/p/979ff6350cb6
5、https://zhang759740844.github.io/2017/07/05/Swift%E5%92%8COC%E7%9A%84%E6%B7%B7%E7%BC%96%E5%AE%9E%E8%B7%B5/
6、http://www.php-master.com/post/151913.html
7、https://www.jianshu.com/p/34bf481d5c13
8、https://www.jianshu.com/p/b763b65005bd
9、https://gysxl.github.io/2017/11/03/%E5%9F%BA%E4%BA%8EXCUITest%E8%BF%9B%E8%A1%8C%E7%9A%84iOSMonkey%E6%B5%8B%E8%AF%95/
10、http://www.php-master.com/post/151913.html
11、https://moto0421.iteye.com/blog/1570876
12、https://juejin.im/entry/58eddde3570c350057f2b975

2019-02-26 14:16:29 wei78008023 阅读数 1526
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

之前在开发是遇到了在OC文件中调用Swift对象的变量调用不到的问题,这里总结一下:

1.首先我们一个Swift项目TestProject。

2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量swiftName。

import UIKit

class SwiftFile: NSObject {

    var swiftName = ""
}

3.建立一个OC的文件ObjectFile,并导入“HFSTeacher-Swift.h”(OC想要调用Swift需要导入此文件)如何配置以及导入原因可以自行查询。

#import "ObjectFile.h"
#import "HFSTeacher-Swift.h"

@implementation ObjectFile

-(void)oneMethod
{
    SwiftFile *swiftFile = [[SwiftFile alloc]init];
    NSLog(@"%@",swiftFile.swiftName);
}

@end

这个时候会报错,说在SwiftFile中找不到swiftName成员。

4.这个时候需要在SwiftFile.swift中加入一个声明@objcMembers以表示文件中成员可以被OC调用:

import UIKit

@objcMembers
class SwiftFile: NSObject {

    var swiftName = ""
}

5.如此则大功告成!

2016-08-25 16:48:00 wangyan214 阅读数 243
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

写一个桥接头文件


1. 在桥接头文件中 加入你要调用的  #import "XX.h"

2.TARGETS -->Build Settings 搜Briding


添加桥接头文件的绝对路径$(SRCROOT)/XX.h


这个地方有个坑  有的显示添加的路径不正确或着找不到你要的第三方库,解决如下:

Targets ---->Build Setting---->搜search Paths,在user Header Search Paths  后面空白处点击添加${SRCROOT}  后面选择 recursive



2017-05-23 12:15:55 SharkToping 阅读数 529
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

一、在OC文件中调用Swift代码需要导入一个#import <工程名-Swift.h>的头文件、该文件编译一下就会由系统创建,并且是不可见的。

二、有‘工程名-Bridging-Header’这样的头文件

     该文件是自动创建的在swift中调用OC代码使用的桥接文件,需要将在Swift中使用的OC的相关头文件添加在此处,

如没有该文件则需要如下操作:

1、手动创建一个头文件(名称不限)。

2、在Build Settings中搜索Objective-C Bridging Header。

3、将该文件相对于工程的路径填入该项。


Swift 与 OC 互相调用

阅读数 2832

swift 调用oc委托

阅读数 761

swift调用第三方oc库

阅读数 1059

oc调用swift

阅读数 1594

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