首页 技术 正文
技术 2022年11月15日
0 收藏 400 点赞 3,614 浏览 4573 个字

创建混编的Framework工程

第一步:创建target为Framework的工程

打开Xcode6-Beta,菜单栏File—>New—>Project; 创建一个新的工程,工程模板选择iOS—>FrameWork & Library—>Cocoa Touch Framework,下一步进入工程选项设置,工程名根据自己的目的输入一个有意义的Framework的名字,关键的是Language:选项我们选择Swift而不是Objective-C。

  1. 新建项目: Objective-C和Swift混合编程开发
  2. 选择模板: Objective-C和Swift混合编程开发
  3. 配置项目名称和语言 Objective-C和Swift混合编程开发

第二步:创建Objective-C和Swift源代码文件

在第一步创建完项目之后,项目中默认会有一个和项目同名的接口文件:FirstFixed.h

然后我们分别创建一个Objective-C语言的类OCView(OCView.h/.m),和一个Swift语言的类SwiftView(SwiftView.swift),以及一个MixedView类(MixedView.swift)。

此三个自定义类文件的Demo目的分别是:

  1. OCView.h/m:开始主要用Objective-C语言实现,后面加入代码引用项目里的Swift代码写的SwiftView类。演示Objective-C创建UI类和在Objective-C中调用Swift语言编写的类或者函数。
  2. SwiftView.swift:这个是Swift语言实现一个简单类。演示Swift语言创建UI类。
  3. MixedView.swift:这个也是Swift语言实现的一个简单类。演示在Swift语言代码中调用Objective-C语言编写的类或者函数。

OCView.h内容如下:

//
// OCView.h
// FirstMixed
//
// Created by WuQiong on 6/3/14.
// Copyright (c) 2014 长沙戴维营教育. All rights reserved.
//#import <UIKit/UIKit.h>@interface OCView : UIView@end

OCView.m内容如下:

//
// OCView.m
// FirstMixed
//
// Created by WuQiong on 6/3/14.
// Copyright (c) 2014 长沙戴维营教育. All rights reserved.
//#import "OCView.h"//引入swift代码自动生成的接口文件,此文件会自动生成的。不要自己创建。
//此文件路径的命名格式为<ProjectName/ProductModuleName-Swift.h>,-Swift.h是固定后缀
#import <FirstMixed/FirstMixed-Swift.h>@implementation OCView- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
OCView *mView = [[OCView alloc] initWithFrame: CGRectMake(0, 0, frame.size.width/2, frame.size.height)];
[self addSubview: mView];
//在OC代码里使用Swift代码写的类
SwiftView *swiftView = [[SwiftView alloc]initWithFrame:CGRectMake(20,10, 20, 20)];
[self addSubview:swiftView];
}
return self;
}/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/@end

SwiftView.swift内容如下:

//
// SwiftView.swift
// FirstMixed
//
// Created by WuQiong on 6/4/14.
// Copyright (c) 2014 长沙戴维营教育. All rights reserved.
//import UIKitclass SwiftView: UIView { init(frame: CGRect) {
super.init(frame: frame)
} /*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect)
{
// Drawing code
}
*/}

MixedSwift.swift内容如下:

//
// MixedView.swift
// FirstMixed
//
// Created by WuQiong on 6/3/14.
// Copyright (c) 2014 长沙戴维营教育. All rights reserved.
//import UIKitclass MixedView: UIView { init(frame: CGRect) {
super.init(frame: frame) self.backgroundColor = UIColor.purpleColor() //在swift代码里使用OC写的类。
//需要在build setting里的Objective-C Bridge Headers
//里设置所需要用的OC类接口文件的路径,而非目录路径。
let ocView = OCView();
self.addSubview(ocView);
} /*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect)
{
// Drawing code
}
*/}

如果只是在本项目中的Swift代码中调用指定的Objective-C代码,那只需要在工程设置页面的Build Settings中的Objective-C Bridge Headers里设置所需要用的指定OC接口文件的路径,而非目录路径。这样就可以在Swift文件里可见病使用了。 完全不需要在Swift代码里进行任何类似import这样的行为操作。

Objective-C Bridge Headers设置图示:

Objective-C和Swift混合编程开发

以上是我们自定义实现的一些代码,下面我们来看看Xcode自动生成的那个接口文件是什么样的: FirstFixed.h的内容:

//
// FirstMixed.h
// FirstMixed
//
// Created by WuQiong on 6/3/14.
// Copyright (c) 2014 长沙戴维营教育. All rights reserved.
//#import <UIKit/UIKit.h>//! Project version number for FirstMixed.
FOUNDATION_EXPORT double FirstMixedVersionNumber;//! Project version string for FirstMixed.
FOUNDATION_EXPORT const unsigned char FirstMixedVersionString[];// In this header, you should import all the public headers of your framework using statements like #import <FirstMixed/PublicHeader.h>

大家注意一下Xcode6-Beta自动生成的接口文件的最后一行注释,表达出了一个我们之前没遇到过的概念。那就是接口文件他也划分了public、private、project三个范畴的概念。这个大家可以去工程设置里的Build Phases里可以看到新版Xcode的变化。

Objective-C和Swift混合编程开发

到目前为止,我们的firstMixed.Framework项目就有空成功编译了。 但是现在的framework如果被引入到其他App项目去使用的话。那就只能使用里面的那2个Swift类,而不能使用OCView这个类。因为默认只导出了Swift代码写的类到这个框架的接口文件中,这个大家可以打开framework下对应的Headers目录查看个究竟。

好,如果我们需要把这个混合语言编写的framework中的Objective-C代码的接口文件也需要导出到此框架的接口文件中,即公开出去。这个时候我们需要做两个操作:

  1. 在工程设置页面的Build Phases里,把Headers中的Project栏目下的OCView.h这个Objective-C写的接口文件拖拉到上面的Public栏目下,这样就会把Objective-C写的类和函数的接口给公开给框架的使用者。Objective-C和Swift混合编程开发
  2. 在Xcode6-Beta自动生成的FirstMixed.h接口文件的最后加入一行导入所要公开的接口文件:
//
// FirstMixed.h
// FirstMixed
//
// Created by WuQiong on 6/3/14.
// Copyright (c) 2014 长沙戴维营教育. All rights reserved.
//#import <UIKit/UIKit.h>//! Project version number for FirstMixed.
FOUNDATION_EXPORT double FirstMixedVersionNumber;//! Project version string for FirstMixed.
FOUNDATION_EXPORT const unsigned char FirstMixedVersionString[];// In this header, you should import all the public headers of your framework using statements like #import <FirstMixed/PublicHeader.h>
#import <FirstMixed/FirstMixed.h> //本接口文件必须在项目的Build Phases页面中的Headers栏里面设置为public,否则编译出错。

其实,有经验的同学应该会意识到,上面第二条可以不在最后加这接口文件,这里加到框架的接口文件后面是为了统一接口。简单化。

这样,把工程编译完后,就会生成一个FirstMixed.framwork。把他加入到其他App工程中后。就可以只有的使用framework中的Objective-C和Swift的公开的所有类和函数了,不管是Objective-C还是Swift的,都可以。

第三步:项目代码测试和视频演示教程

视频临时观看地址:http://www.ubuntucollege.cn/course/29/learn  第一课时

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,103
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,579
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,427
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,199
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,834
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,917