注册 登录
主题 : 一个从ObjC调用Swift函数的例子
级别: 光明使者

状态: 连续签到 - [144天]
UID: 491
精华: 6
发帖: 1766
可可豆: 112205 CB
威望: 112852 点
在线时间: 8537(时)
注册时间: 2008-08-19
最后登录: 2018-04-07
0 楼:  发表于: 2014-06-05 16:23    发自: Web Page
来源于 Swift教程 分类

一个从ObjC调用Swift函数的例子   

这次齐了,两边可以互相调用了,Swift -> ObjC 请见:
一个从Swift调用ObjC函数的例子

关键有2点:
图1,@objc把类和方法名字包起来



图2,引入 xxx-swift.h头文件(千万注意,这个头文件是Xcode自动生成的,但是在Xcode工程找不到)




代码附件下载,真机模拟器都跑过了。
附件: CCDemo.zip (72 K) 下载次数:450
 Developer
------------------------------------------------------------
Η αγάπη ποτέ δεν αποτυγχάνει.
愛是永不止息。
Love never fails.

    --《圣经.新约》哥林多前书第13章
级别: 骑士
状态: 连续签到 - [1天]
UID: 23566
精华: 0
发帖: 313
可可豆: 850 CB
威望: 851 点
在线时间: 766(时)
注册时间: 2010-07-01
最后登录: 2017-07-12
1 楼:  发表于: 2014-06-05 16:56    发自: Web Page
感谢分享!!
级别: *
UID: 91764
精华: *
发帖: *
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
2 楼:  发表于: 2014-06-05 17:22    发自: Web Page
感谢版主,另外我有一问题.
我试加移除@objc(initWithName:)
我在xxx-swift.h里还是会看到这样的声明
- (instancetype)initWithName:(NSString *)name OBJC_DESIGNATED_INITIALIZER;

实际上是,只在定义过
init(...)
xxx-swift.h就会自动为这个init添加对应的initWithXXX  XXX为第一个参数.


级别: 新手上路
UID: 191338
精华: 0
发帖: 33
可可豆: 132 CB
威望: 135 点
在线时间: 42(时)
注册时间: 2012-12-17
最后登录: 2015-06-30
3 楼:  发表于: 2014-06-05 17:50    发自: Web Page
回 楼主(lvyile) 的帖子
我防照了例子做了一吓。。不行。 系统提示,没有找到xxxx-Swift.h
级别: 新手上路
UID: 191338
精华: 0
发帖: 33
可可豆: 132 CB
威望: 135 点
在线时间: 42(时)
注册时间: 2012-12-17
最后登录: 2015-06-30
4 楼:  发表于: 2014-06-05 18:03    发自: Web Page
我在你的项目中加入新的xxx.swift文件。。
照你的方法做一次。。提示找不到xxx-swift.h文件。。

是不是有什么地方要充置?


级别: 新手上路
UID: 86113
精华: 0
发帖: 46
可可豆: 373 CB
威望: 353 点
在线时间: 98(时)
注册时间: 2011-08-09
最后登录: 2018-05-25
5 楼:  发表于: 2014-06-06 11:06    发自: Web Page
回 4楼(dxking100) 的帖子
当你创建一个新的swift文件后,记得编译一下 ,然后你就能在  “项目名称-Swift.h”文件中找到  类似#if defined(__has_feature) && __has_feature(modules)
@import ObjectiveC;
#endif


SWIFT_CLASS("Demo")
@interface Demo : NSObject
- (instancetype)initWithName:(NSString *)name OBJC_DESIGNATED_INITIALIZER;
@end


SWIFT_CLASS("HttpManager")
@interface HttpManager : NSObject
- (instancetype)initWithUrl:(NSString *)url OBJC_DESIGNATED_INITIALIZER;
@end
这样的代码      
级别: 新手上路
UID: 191338
精华: 0
发帖: 33
可可豆: 132 CB
威望: 135 点
在线时间: 42(时)
注册时间: 2012-12-17
最后登录: 2015-06-30
6 楼:  发表于: 2014-06-08 16:12    发自: Web Page
回 5楼(zhou1023710) 的帖子
谢了。。。

级别: *
UID: 243519
精华: *
发帖: *
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
7 楼:  发表于: 2014-06-19 16:06    发自: Web Page
mark一下!!!!
级别: 骑士

状态: 连续签到 - [66天]
UID: 6213
精华: 0
发帖: 72
可可豆: 4490 CB
威望: 5059 点
在线时间: 1314(时)
注册时间: 2009-06-08
最后登录: 2018-09-17
8 楼:  发表于: 2015-02-13 15:42    发自: Web Page
回 4楼(dxking100) 的帖子
我今天也遇到这个问题了,不过就在刚刚,我发现一个很奇怪的现象。
只需要导入项目名称或target名称+"-swift.h"即可,说明这个不是指定的某一个swift的.h,而是整个的。这下问题解决了。
级别: 骑士

UID: 143668
精华: 0
发帖: 300
可可豆: 763 CB
威望: 763 点
在线时间: 1413(时)
注册时间: 2012-05-17
最后登录: 2018-05-29
9 楼:  发表于: 2015-02-25 23:08    发自: Web Page
回 6楼(dxking100) 的帖子
你是怎么解决的?我现在项目也遇到这个问题了,没有找到xxxx-Swift.h ,求解
有志者,事竟成;破釜沉舟,百二秦关终归楚;

苦心人,天不负;卧薪尝胆,三千越甲可吞吴。

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

描述
快速回复

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

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

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