OC 使用swift返回值非void方法,但在OC中返回值为void 问题,太坑了

闲暇的时候,我想着既然swift能调用OC代码,那是不是OC也可以调用swift,既然苹果推出swift,应该就一定可以调用,我就搜了一下,事实上却是可以。于是乎,我就按照网上教程走了一遍,设置了桥接文件,OC中导入swift文件,一切准备工作做好之后准备开始撸代码了,但是刚开始就被坑了,很惨。

    我在swift中写了个函数,开始设置了返回值为void类型,如下

  @objc  public var i=0
    @objc func setI(j:Int) ->Void {
        i=j
        print(i)
       
    }
    

然后在OC中准备调用,

SwiftViewController *swif=[[SwiftViewController alloc]init];
    [swif setI:2];
    

不报错,不警告,但是什么都没输出出来,我设置断点,也是没反应。这下我就蒙了。然后我就又声明了一个swift文件,在这里调用该方法,正常输出,也就是说我swift代码没问题,我想也是,这么简单的函数总不会错的。那么问题来了,为什么不输出。我去搜了很久,也没有这类问题,都是直接调用,然后就成功了。我的就是不行,气得想打人。于是乎,灵机一动,我就把返回值类型改了,改成Int ,然后return i 再次在OC中调用该方法,并声明一个变量接受,然后问题就出来了,报错了,报错信息如下:Initializing 'NSInteger' (aka 'long') with an expression of incompatible type 'void'。啥情况,告诉我函数返回值类型为void,不能用NSInteger接收,我明明定义了返回值是Int啊,而且我在swift中调用也没错误,咋跑到OC中就不行了。

OC中:

swift中:

同一个项目,同一个函数,咋不同语言返回值还不一样。然后又是各种查资料。也是没有,估计是这类问题太简单,大佬们都知道,但是我这种自学的小白就傻眼了。

不知道过了多久,在oc中调用时候出现了这么个函数:

看着怎么这么眼熟,对,就是和我定义的函数格外的相似,返回值和参数都一样,就是名字不同。难道swift还有这么个系统函数??,然后在swift中找了一下,找不到。突然意识到,这个该不会就是我的那个函数吧,试了一下,还真就是,设置断点后,也确实停在我定义的函数中,这也太坑了吧。既然把函数给我改了,那OC里的那个

为什么还会有,气的想打人。

希望这个能对像我一样的小白有些用处,毕竟太坑了,不过OC调Swift还是很少的,基本都是Swift调OC,不过难免有些奇葩公司会有这种需求,会调总归好的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值