• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift项目兼容Objective-C问题汇总

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

原文地址:http://www.cocoachina.com/swift/20150608/12025.html


一、解决这个问题

Swift项目须要使用封装好的Objective-c组件、第三方类库,苹果提供的解决方式可以处理日常大部分需求,但还不能称之为完美。混编过程中会遇到非常多问题。本文将Swift兼容Objective-c的问题汇总,以帮助大家更好的使用Swift,内容列表例如以下:

1. Swift调用Objective-c代码

2. Objective-c调用Swift代码

3. Swift兼容Xib/Storyboard

4. Objective-c巧妙调用不兼容的Swift方法

5. 多Target编译错误解决

6. 第三方类库支持

二、基础混合编程

Swift与Objective-c的代码相互调用。并不像Objective-c与C/C++那样方便,须要做一些额外的配置工作。不管是Swift调用Objective-c还是Objective-c调用Swift,Xcode在处理上都须要两个步骤:

2.1 Swift调用Objective-c代码

Xcode对于Swift调用Objective-c代码。除宏定义外,其他支持相对完好。

2.1.1 使用Objetvie-c的第一步

告诉Xcode、哪些Objective-c类要使用。新建.h头文件,文件名称能够随意取。建议採用“项目名-Bridging-Header.h”命令格式。

Tips

Swift之IOS项目,在Xcode6创建类文件。默认会自己主动选择OS X标签下的文件,这时一定要选择iOS标签下的文件,否则会出现语法智能提示不起作用。严重时会导致打包出错。

2.1.2 第二步,Target配置,使创建的头文件生效

设置Objective-C Bridging Header时,路径要配置正确,比如:创建的名为“ILSwift-Bridging-Header.h”文件。存于ILSwift项目文件夹的根文件夹下。写法例如以下:

1
ILSwift/ILSwift-Bridging-Header.h

当然,在新项目中,直接创建一个Objective-c类,Xcode会提示:

直接选择Yes就可以,假设不小心点了其他button。能够依照上面的步骤一步一步加入。

2.2 Objective-c调用Swift代码

2.2.1 Objective-c调用Swift代码两个步骤

第一步告诉Xcode哪些类须要使用(继承自NSObject的类自己主动处理,不须要此步骤),通过keyword@objc(className)来标记

1
2
3
4
5
6
7
8
import UIKit
@objc(ILWriteBySwift)
class ILWriteBySwift {
    var name: String!
    class func newInstance() -> ILWriteBySwift {
        return ILWriteBySwift()
    }
}

第二步引入头文件,Xcode头文件的命名规则为

1
$(SWIFT_MODULE_NAME)-Swift.h

示比例如以下:

1
#import "ILSwift-Swift.h"

Tips

不清楚SWIFT_MODULE_NAME可通过下面步骤查看

2.2.2找不到$(SWIFT_MODULE_NAME)-Swift.h

1.遇到此问题可按下面步骤做常规性检查

  • 确定导入SWIFT_MODULE_NAME)-Swift.h头文件的文件名称正确

  • SWIFT_MODULE_NAME)-Swift.h在clean后没有又一次构建,运行Xcode->Product->Build

2.头文件循环

在混合编程的项目中,因为两种语言的同一时候使用,常常会出现下面需求:在Swift项目中须要使用Objectvie-c写的A类。而A类又会用到Swift的一些功能,头文件的循环。导致编译器不能正确构建$(SWIFT_MODULE_NAME)-Swift.h,遇到此问题时,在.h文件做例如以下处理

1
2
3
4
//删除下面头文件
//#import "ILSwift-Swift.h"
//通过代码导入类
@class ILSwiftBean;

在Objevtive-c的.m文件最上面,加入

1
#import "ILSwift-Swift.h"

出现Use of undecalared identifier错误或者找不到方法,例如以下:

引起的原因有下面几种可能:

  • 使用的Swift类不是继承自NSObject,增加keyword就可以


  • 鲜花

    握手

    雷人

    路过

    鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Objective-C类型判断发布时间:2022-07-12
下一篇:
EffectiveObjective-C2.0学习记录发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap