注册 登录
主题 : 关于swift和oc混编后使用宏报错的问题
级别: 新手上路
UID: 56434
精华: 0
发帖: 34
可可豆: 214 CB
威望: 214 点
在线时间: 116(时)
注册时间: 2011-03-11
最后登录: 2018-11-01
0 楼:  发表于: 2014-06-05 10:58    发自: Web Page
来源于 技术求助 分类

关于swift和oc混编后使用宏报错的问题   

比如我有个这样的宏,定义在我的oc代码里的,现在可以混编用oc类没问题了:



#define P_SCREEN                        UIScreen.mainScreen().bounds


应该不算复杂宏吧O.O,可是在swift里想用它的时候,报错:


Use of unresolved identifier 'P_SCREEN'




想不通啊。。。

级别: 风云使者

状态: 连续签到 - [480天]
UID: 78198
精华: 2
发帖: 3543
可可豆: 3376 CB
威望: 13237 点
在线时间: 4900(时)
注册时间: 2011-06-28
最后登录: 2017-10-23
1 楼:  发表于: 2014-06-05 11:16    发自: Web Page
#define P_SCREEN                        UIScreen.mainScreen().bounds
放在bridge-h文件中试试~
微信whglyy
级别: 新手上路
UID: 56434
精华: 0
发帖: 34
可可豆: 214 CB
威望: 214 点
在线时间: 116(时)
注册时间: 2011-03-11
最后登录: 2018-11-01
2 楼:  发表于: 2014-06-05 11:20    发自: Web Page
还是报错O.O~
图片:屏幕快照 2014-06-05 上午11.17.15.png
图片:屏幕快照 2014-06-05 上午11.17.31.png
级别: 风云使者

状态: 连续签到 - [480天]
UID: 78198
精华: 2
发帖: 3543
可可豆: 3376 CB
威望: 13237 点
在线时间: 4900(时)
注册时间: 2011-06-28
最后登录: 2017-10-23
3 楼:  发表于: 2014-06-05 11:28    发自: Web Page
同一个文件中不能出现 Swift & OC混编情况
你的#define 是 OC的 后面是Swift的~
微信whglyy
级别: 新手上路
UID: 56434
精华: 0
发帖: 34
可可豆: 214 CB
威望: 214 点
在线时间: 116(时)
注册时间: 2011-03-11
最后登录: 2018-11-01
4 楼:  发表于: 2014-06-05 12:55    发自: Web Page
恩,这个我刚刚试了,还是不行,改成了OC的语法,仍然报错,编译后报错的内容没有变 ……想不通啊!
图片:屏幕快照 2014-06-05 下午12.52.55.png
图片:屏幕快照 2014-06-05 下午12.53.10.png
级别: 新手上路
UID: 56434
精华: 0
发帖: 34
可可豆: 214 CB
威望: 214 点
在线时间: 116(时)
注册时间: 2011-03-11
最后登录: 2018-11-01
5 楼:  发表于: 2014-06-05 12:55    发自: Web Page
回 3楼(lyywhg) 的帖子
刚发现居然是版主O.O~
上面四楼的,想查找P_SCREEN的定义,会提示未定义。
级别: 天使

状态: 连续签到 - [7天]
UID: 5513
精华: 19
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
注册时间: 2009-05-06
最后登录: 2016-08-30
6 楼:  发表于: 2014-06-05 13:15    发自: iPhone
对于OC与Swift互操作必须用互操作协议,不能直接把OC语法直接引入Swift。
新浪围脖地址:http://t.sina.com.cn/1181389417
CPU Dasher for OS X: https://itunes.apple.com/cn/app/cpu-dasher/id1013487510?mt=12

级别: 新手上路
UID: 56434
精华: 0
发帖: 34
可可豆: 214 CB
威望: 214 点
在线时间: 116(时)
注册时间: 2011-03-11
最后登录: 2018-11-01
7 楼:  发表于: 2014-06-05 14:07    发自: Web Page
回 6楼(zenny_chen) 的帖子
恩,但是上面我已经改成OC的语法了,还是不行,而且我定义的其他宏也没法使用O.O~

类可以使用,但是宏还是不行。。。

哎呀想通了=。=~宏把语句相当于直接替换过来了,等于在swift里用了OC语法,所以报错,但是我用的类似#define ccpZero CGPointZero这样的宏也会报错是为什么呢。。。

不是说swift支持简单的宏定义么。。。那么swift支持的宏定义到底是怎么用啊抓狂。。。
[ 此帖被ravioyla在2014-06-05 14:20重新编辑 ]

级别: 新手上路
UID: 56434
精华: 0
发帖: 34
可可豆: 214 CB
威望: 214 点
在线时间: 116(时)
注册时间: 2011-03-11
最后登录: 2018-11-01
8 楼:  发表于: 2014-06-05 14:40    发自: Web Page
回 3楼(lyywhg) 的帖子
Simple Macros
Where you typically used the #define directive to define a primitive constant in C and Objective-C, in Swift you use a global constant instead. For example, the constant definition #define FADE_ANIMATION_DURATION 0.35 can be better expressed in Swift with let FADE_ANIMATION_DURATION = 0.35. Because simple constant-like macros map directly to Swift global variables, the compiler automatically imports simple macros defined in C and Objective-C source files.

找到方法了!简单宏在这边要改这样了O.O。。。得把宏定义的头文件大改了呜呜呜。。。
级别: 新手上路
UID: 56434
精华: 0
发帖: 34
可可豆: 214 CB
威望: 214 点
在线时间: 116(时)
注册时间: 2011-03-11
最后登录: 2018-11-01
9 楼:  发表于: 2014-06-05 14:56    发自: Web Page
//数据定义

//点
#define ccp(__X__,__Y__)                CGPointMake(__X__,__Y__)
#define ccpZero                            CGPointZero
#define ccpMax                            ccp(1.0f, 1.0f)
#define ccpHalf(size)                    ccp(size.width/2,size.height/2)

在swift里O.O~
//数据定义

//点
let ccp = CGPointMake
let ccpZero = CGPointZero
let ccpMax: CGPoint = ccp(1.0, 1.0)

func ccpHalf(size: CGSize) -> CGPoint {
    ccp(size.width/2,size.height/2)
}

本站内容均为本站转发,已尽可能注明出处。因未能核实来源或转发内容图片有权利瑕疵的,请及时联系本站,本站会第一时间进行修改或删除。 QQ : 3442093904

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部