iOS开发——实用篇&Swift与Object-C混编之框架

swift与OC混编之框架的创建和调用

首先创建一个project取个名字叫“MyMixed”,选择iOS-framework&library-cocoa touch framework

然后在里面创建一个SwiftView.swift文件,一个objc的OCView文件和MyOCView文件三个文件都继承UIView

首先在SwiftView里调用OCView

 1 import UIKit
 2
 3
 4
 5 class SwiftView: UIView {
 6
 7
 8
 9     init(frame: CGRect) {
10
11         super.init(frame: frame)
12
13         self.backgroundColor = UIColor.redColor()
14
15
16
17         var ocView = OCView(frame:CGRectMake(0,0,50,50))
18
19         self.addSubview(ocView)
20
21     }
22
23
24
25 }
26
27  

然后在MyOCView里调用SwiftView

 1 @implementation MyOCView
 2
 3 - (instancetype)initWithFrame:(CGRect)frame
 4
 5 {
 6
 7     self = [super initWithFrame:frame];
 8
 9     if (self) {
10
11 self.backgroundColor = [UIColor grayColor];
12
13         SwiftView *sView = [[SwiftView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
14
15         [self addSubview:sView];
16
17     }
18
19     return self;
20
21
22
23 }

这时候编译是会出错的,因为不能互相找到路径,这个时候要在工程MyMixed的build settings-swift compiler-objective-才 bridging header里加入头文件路径MyMixed/OCView.h让SwiftView找到OCView.h

然后在OCView.m里加入

//工程名加上编译时会生成的一个名子,这样就可以使用swift文件

#import "MyMixed/MyMixed-Swift.h"

就能通过编译,这个时候混合框架就制作完成了

再重新建一个工程叫MixPro这里我们使用swift语言

然后add files to“。。。”导入框架的工程文件(当然也可以直接导入编译好的framework),然后编译一下框架工程,看是否能编译通过,然后在MixPro工程的build phases里点击link binary with libraries 添加MyMixed.framework,这个时候框架添加完成,编译看是否通过

然后在viewcontroller里添加代码

 1 import UIKit
 2
 3 import MyMixed
 4
 5
 6
 7 class ViewController: UIViewController {
 8
 9
10
11     override func viewDidLoad() {
12
13         super.viewDidLoad()
14
15         // Do any additional setup after loading the view, typically from a nib.
16
17
18
19         var swiftView = SwiftView(frame:CGRect(x:20, y:20, width:100, height:100))
20
21         self.view.addSubview(swiftView)
22
23
24
25         var myocView = MyOCView(frame:CGRectMake(50,140,200,200))
26
27         self.view.addSubview(myocView)
28
29     }
30
31
32
33     override func didReceiveMemoryWarning() {
34
35         super.didReceiveMemoryWarning()
36
37         // Dispose of any resources that can be recreated.
38
39     }
40
41
42
43 }

这个时候会出错,原因是找不到MyOCView,因为我们在创建MyMixed工程的时候选择的swift,所以只有.swift文件才能在外部被看见

我们点击MyMixed工程的MyMixed.h文件可以看见

// In this header, you should import all the public headers of your framework using statements like #import

不难明白如果要这个framework的其他文件被外部工程看见,我们需要#import 这个头文件,但是这个一定是PublicHeader.h所以我们点击MyMixed工程的build phases里的Headers,可以看见public里只有MyMixed.h,我们要想在外部使用MyOCView.h就要把它从project里拖到public里,然后重新编译,错误消除编译通过

附上一张效果图

时间: 2024-08-14 14:56:12

iOS开发——实用篇&Swift与Object-C混编之框架的相关文章

iOS开发——实用篇&Swift与Object-C混编之函数的调用

swift里混编oc 在桥接头文件里#import oc的.h文件,整个swift工程都能使用该oc文件,在.h里暴露的方法都能被该工程使用 //oc文件 TestOC.h 1 #import 2 3 4 5 @interface TestOC : NSObject 6 7 8 9 - (void)sayHello; 10 11 - (void)sayWhat:(NSString *)name andAge:(NSString *)age; 12 13 + (void)sayHelloTwo;

iOS开发——实用篇Swift篇&项目开发常用实用技术

项目开发常用实用技术 实现拨打电话 要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面 (注意:这个需要真机调试,模拟器无效果) 1 //自动打开拨号页面并自动拨打电话 2 UIApplication.sharedApplication().openURL(NSURL(string :"tel://123456")!) 邮件发送功能的实现 2015-07-17 10:38发布:yuhang浏览:21 使用MessageUI.framework框架除了可以发送短信,还能发送Ema

iOS开发——实用篇Swift篇&保存图片到相册

保存图片到相册 最近在深入的学习关于swift相关技术,虽然海做不出什么好的东西,但是感觉收获不少,相信总有一样能用到,所以就总结了一下,希望大家喜欢! 1.OC中的写法 在OC中,我们需要保存图片到相册需要调用这个方法:  1 void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);  想来大家也都看过这个方法的头文件,

iOS开发——实用篇Swift篇&状态栏操作

状态栏操作 在Swift开发过程中,针对状态栏操作的过程有很多. 1.在ViewController中操作当前ViewController的状态栏 [objc] view plaincopy /** 隐藏状态栏 */ override func prefersStatusBarHidden() -> Bool { return true; } /** 设置状态栏风格 */ override func preferredStatusBarStyle() -> UIStatusBarStyle {

iOS开发——实用篇Swift篇&QQ登入界面实现

我们知道在App Store中几乎所有软件都设计到账户的登入,而我们最常见的就是QQ,微信,在没有踏入程序员这条不归路之前,看到一个个的界面都感觉好高大上的样子. 在学习的过程中,自己就照着手机上面APP自己比较好奇的界面实现了一下,今天分享一下关于QQ登入界面,完全纯代码,实用StoryBoar太麻烦,个人比较喜欢用代码实现,而几乎所有登入界面几乎都是一样的,只是图标不同,或者还会有其他的拓展功能,不过这里都会了其他的纳豆不是事儿. 废话不多说,直接上代码 import UIKit class

iOS开发——实用篇&KVO与KVC详解

KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听(KVO)特性: 键值编码KVC 键值监听KVO 键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Valu

iOS开发——实用篇&提高iOS开发效率的方法和工具

提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时在使用AppCode等其他的IDE,在这里我主要介绍Xcode中提升开发效率的方法. 1.善用快捷键 快捷键是开发中必不可少的,当你善于使用快捷键的时候,十指在键盘上飞舞,那画面太美,我不敢想象. 常用快捷键操作 2.常用代码片段 开发中有一些常用的代码,可以放到代码片段中,然后下次你就可以使用快捷

ios开发——实用技术篇Swift&Swift调用C、C++、Object

Swift调用C.C++.Object 1.Swift调用C语言a,首先在项目中添加 CFile 文件命名为CHello,同时产生桥梁文件. b,创建之后的项目结构 b,在CHello.h文件中编写接口方法,在CHello.c编写实现方法,最后在SwiftCallC-Bridging-Header.h文件中引入CHello.h CHello.h文件 #ifndef __SwiftCallC__CHello__ #define __SwiftCallC__CHello__ #include <st

ios开发——实用技术篇Swift篇&amp;地址薄、短信、邮件

1 //返回按钮事件 2 @IBAction func backButtonClick() 3 { 4 self.navigationController?.popViewControllerAnimated(true) 5 } 6 7 //新增联系人 8 @IBAction func addPeople () 9 { 10 //取得电话薄句柄 11 var error:Unmanaged<CFError>? 12 var addressBook: ABAddressBookRef? = AB