• 最近在一个混编项目中,一个OC类需要去访问一个Swift,访问其他Swift都可以,但就没法访问报以下错误: 点进去看发现该类型是个...后来就像因为Swift中可以没有父类,而OC的中有基类的,所有都最终继承至NSObj...
    • 最近在一个混编项目中,一个OC类需要去访问一个Swift类,访问其他Swift类都可以,但就没法访问报以下错误:
      报错
    • 点进去看发现该类型是个结构体,如下所示:
      在这里插入图片描述在这里插入图片描述
    • 解决方案:因为Swift的结构体除了不能继承外可以有自己的成员变量和方法,就是一个不能继承的类.所以我将struct改成了class,结果还是不行.后来就像因为Swift中的类可以没有父类,而OC的中有基类的,所有类都最终继承至NSObject,所以就将该CTPCarVideoUploadInfoModel也继承NSObject,果然改完后再OC中就可以访问该类型了.改完后如下:
       class CTPCarVideoUploadInfoModel:NSObject{
       }
      
    展开全文
  • OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中,调研了一下发现问题所在,下面是我的解决方案: 问题的发现过程UIViewController *destinationVC = [[NSClassFromString...

    在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案:

    问题的发现过程

    UIViewController *destinationVC = [[NSClassFromString(demoInfoModel.demoVCName) alloc] init];
            [self.navigationController pushViewController:destinationVC animated:YES];

    在使用以上代码时发现,Swift的通过类名在OC中通过NSClassFromString获取不到这个类
    ,返回值为nil

    问题的原因和解决方法

    经过一番查找后发现是因为在OC中Swift类中的所有类的接口都转到了一个叫YourProduct_Example-swift.h的头文件中,YourProduct是你的工程名,其中的类名和方法都已经改变了,我们需要做的就行进入到这个头文件中,去找到对应的类名就行了,如下图所示:

    这里写图片描述

    红框里面的字符串就是你Swift里面转成OC后的类名,将之前的类名替换就行了,比如:

    // 我之前的类名是WCLLoadingViewViewDemoVC
    NSClassFromString(@"WCLLoadingViewViewDemoVC")
    // 替换到OC中就是_TtC19CRAnimation_Example20WCLLoadingViewDemoVC
    NSClassFromString(@"_TtC19CRAnimation_Example20WCLLoadingViewDemoVC")

    通过以上步骤就能转换成功了

    展开全文
  • 上篇讲了Swift中使用OCSwift中使用OC,这篇讲下OC中使用Swift。 在OC中需要用到Swift代码的文件中引入#import “XXX-Swift.h”,XXX是你的工程名称。 特别注意 1、被使用的Swift的必须是至少继承自NSObject...

    Swift中引用OC看这篇
    在OC中需要用到Swift代码的文件中引入#import “XXX-Swift.h”,XXX是你的工程名称。

    特别注意
    1、被使用的Swift的类必须是至少继承自NSObject的,不然OC识别不了这个类。
    2、Swift中的属性和方法,要加上@objc标识,不然识别不了。

    代码如下,Swift中定义了一个类,这个类有一个类属性和一个类方法。

    class UUUU:NSObject {
        @objc static var yyy:String?
        @objc static func test()->(){
            print("XXXX")
        }
    }

    在OC需要用到的地方先引入#import “XXX-Swift.h”,然后就能用了

        UUUU *u  =[UUUU new];
        NSLog(@"%@" , UUUU.yyy);
        [UUUU test];

    Swift中使用类属性和类方法代替宏定义

    另外,在Swift的类中,可以使用只读的类属性和类方法来代替OC中的宏定义,这样定义的宏在OC中直接用,省略了在oc中再定义一次的麻烦。代码如下

    class UUUU:NSObject {
        //只读的类属性
        @objc static var name:String{
            return "jim"
        }
        //类方法
        @objc static func RGBColor(r:Float , g:Float , b:Float) -> UIColor {
            return UIColor.init(red: (CGFloat(r/255.0)), green: (CGFloat(r/255.0)), blue: (CGFloat(r/255.0)), alpha: 1.0)
        }
    }

    另一种Swift代替宏定义的方法是使用全局变量和全局函数来定义,Swift中使用全局变量和函数代替宏

    展开全文
  • iOS OC项目调用Swift类

    2017-03-17 13:51:27
    网上有很多关于OC项目使用Swift类的方法,但是亲自试了之后,发现不够详细,多次尝试后,终于出详细的方法。 现把方法和遇到的问题,记录下来,方便其他同仁借鉴.

    网上有很多关于OC项目中使用Swift类的方法,但是亲自试了之后,发现不够详细,多次尝试后,终于找出详细的方法。
    现把方法和遇到的问题,记录下来,方便其他同仁借鉴:

    一、新建一个OC工程,工程名称自定,在这里我定义为OCAndSwiftDemo,如图:

    新建项目架构图

    二、在新建Swift类之前,进行相关设置,如图:

    相关设置

    三、在项目中,新建一个TestDemo的swift类,点击Create后,提示如图:

    创建OC调用Swift类的桥接文件

    选择Create Bridging Header,一定要选择这个,如果不选择,就引入不了Swift类,然后生成”项目名称-Bridging-Header.h”桥接文件

    然后编辑Swift类,如果Swift类想要被OC发现,必须继承自NSObject,如图:

    TestDemo类

    四、调用Swift类,我们想要调用Swift类的方法里面引入头文件:”项目名称-Swift.h”,如图:

    调用Swift类

    注释:如果调用不了Swift类,可以先Shift+Command+R一下。

    展开全文
  • 2. 在swiftOC混编的编译环境下, oc类不能访问swift创建类中的代理? 解决方法如下: 在代理的头部加上 @objc(代理名字),这样就在外部就可以访问了,如下图。 然后就和oc中的代理一样,写上协议方法...


    1. swift与oc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解。

    2. 在swift与OC混编的编译环境下, oc类不能访问swift创建类中的代理?

    解决方法如下:



    在代理的头部加上 @objc(代理名字),这样就在外部就可以访问了,如下图。 然后就和oc中的代理一样,写上协议方法,就可以进行你想要的操作了。



    3. swift中的回调方法介绍:

       1. 通过代理 ,写法大家可以看上面的两张图片,和oc代理差不多。

       2. 通过闭包来实现oc中代码块(Block)的方法,来进行代码回调

           2.1 定义  (swift类)

          

          2.2 调用   (swift类)

        

         2.3 具体回调处:(OC - 类)

         


    本文持续更新, 看oc与swift 混编有哪些雷,需要我们踩

    展开全文
  • 最近在研究swift,就我看来,swift确实是比OC更优秀的语言,这可以体现在很多方面,网上已经对比的很透彻,就一一赘述。 今天研究了一下如何在OC项目使用swift文件,即OCswift的混编问题,发现在OC中要使用...
  • 1 swift项目,不到第三方文件,exp:AFN.h不到,要修改build settings 里的User header custome search paths ,改成${SRCROOT},选择recursive.2 oc项目找不到swift文件,要引入工程名-swift.h文件。A.设置...
  • OC和Swift之间的互调很简单,iOS8以后官方给出了这两种语言之间的桥接方案,简单说...应用较多的主要是在Swift中调用OC类,使得在最新的swift工程中仍然能够兼容使用以前的OC类库等。 这里通过一个简单的例子展示在Sw
  • 2.在swift 新建 OC 比如新建 Request ,会自动生成个。XXXX-Bridging-Header ; 3.让后把 导入的第三方头文件导入进去。例如: #import "AFNetworking.h" 但是他会提示找不到 4. 在 build Seting 搜索L...
  • OC工程调用Swift方法

    2017-01-11 11:45:08
    1.建一个OC工程命名为SwiftOC 2.新建一个swfit文件命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h” 3.配置工程 设置Defines Module 为Yes ...
  • 问题描述:在swift项目的桥接文件 #import导入然而在编译的时候却提示 该文件Not Found解决办法: 添加一项: 保存并重新编译就可以找到了
  • 本文旨在帮助开发者快速从OC开发过渡到Swift开发,挑选了一些比较浅显的但是比较常用的Swift语法特性,在介绍的过程,通常会拿OC中的语言特性作比较,让大家更好的注意到Swift的不同。 另外需要说明的是,笔者也...
  • 之前在开发是遇到了在OC文件调用Swift对象的变量调用不到的问题,这里总结一下: 1.首先我们一个Swift项目TestProject。 2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量...
  • 出错原因 library not found for -lAFNetworking ...由于本人在开发过程主要用的是OC语言,所以pod的都是OC库,Podfile里又没加use_frameworks! 所以一直都是.a类型的。后来因为需求需要用到一个只有swift版本...
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?...最新一些学妹问起,所以抽点时间来写的,适合入门...1. 第一个方向从 swift工程 引入 oc类   1. 1 如何在swift类中使用oc类  1.2 如何在s
  • 说起这个话题,在我看来,比项目中的OC混编C++,C等简单些,毕竟OC和Swift都是苹果自己的开发语言,API什么的都一样,还是更容易混合开发些,好了,废话多说,切正题,OC与Swift怎么混和开发呢?...2.Swift中引入OC
  • OCswift区别

    2019-04-03 10:07:42
    swift中oc中没有的 比如 元组 有泛型 3.因为swift 定义的常亮和变量是没有值的,所以引入了可选的概念,这时候 如果swift没有值的话 就用optional 4.在swift 中,let 声明的常量的值能改变 var 生命的变量的...
  • ...在OC中使用Swift 1.首先创建一个工程名字就叫做CHWTest1 2.在工程的Build Setting把Defines Module改为YES,如图 3.把Product Name设为工程的名字,如图 4
1 2 3 4 5 ... 20
收藏数 11,488
精华内容 4,595
关键字:

oc找不到swift中的类