• 场景描述:在OC类的方法中,调用Swift类的方法报错:No visible @interface for ‘CCC’ declares the selector ‘MMM’(CCC为类名,MMM为方法名) // OC中的方法: - (void)test { NSLog(@"hello ...
    • 场景描述:在OC类的方法中,调用Swift类的方法,报错:No visible @interface for ‘CCC’ declares the selector ‘MMM’(CCC为类名,MMM为方法名)
    // OC中的方法:
    - (void)test {
        NSLog(@"hello Objective-C!");
    
        NSLog(@"===========OC调用Swift===========");
        JRSwiftHello *swift = [[JRSwiftHello alloc] init];
        [swift printHello]; // 调用Swift中方法报错
    }
        // Swift中的方法
        func printHello() {
            print("hello Swift!")
        }
    • 解决办法:在Swift中的方法前加@objc(方法名)
        // 修改后Swift中的方法
        @objc(printHello)
        func printHello() {
            print("hello Swift!")
        }
    • 参考地址:http://blog.csdn.net/IOSWEB/article/details/52037484

    • 拓展

      • Swift文件中使用OC类:在自动生成的桥接文件XXX-Bridging-Header.h中引入OC头文件
      • OC文件中使用Swift类:在需要使用的文件中引入#import "XXX-Swift.h"
      • 注:XXX为项目名称
    展开全文
  • 1. swiftoc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解。 2. 在swiftOC混编的编译环境下, oc类不能访问swift创建类中的代理? 解决方法如下: 在代理的头部加上 @objc(代理...


    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 混编有哪些雷,需要我们踩

    展开全文
  • 之前在开发是遇到了在OC文件中调用Swift对象的变量调用不到的问题,这里总结一下: 1.首先我们一个Swift项目TestProject。 2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量...

    之前在开发是遇到了在OC文件中调用Swift对象的变量调用不到的问题,这里总结一下:

    1.首先我们一个Swift项目TestProject。

    2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量swiftName。

    import UIKit
    
    class SwiftFile: NSObject {
    
        var swiftName = ""
    }

    3.建立一个OC的文件ObjectFile,并导入“HFSTeacher-Swift.h”(OC想要调用Swift需要导入此文件)如何配置以及导入原因可以自行查询。

    #import "ObjectFile.h"
    #import "HFSTeacher-Swift.h"
    
    @implementation ObjectFile
    
    -(void)oneMethod
    {
        SwiftFile *swiftFile = [[SwiftFile alloc]init];
        NSLog(@"%@",swiftFile.swiftName);
    }
    
    @end

    这个时候会报错,说在SwiftFile中找不到swiftName成员。

    4.这个时候需要在SwiftFile.swift中加入一个声明@objcMembers以表示文件中成员可以被OC调用:

    import UIKit
    
    @objcMembers
    class SwiftFile: NSObject {
    
        var swiftName = ""
    }
    

    5.如此则大功告成!

    展开全文
  • @OC调用Swift 方法 OC调用传多值参数Swift方法的处理 截止目前, Swift 已经达到4.2版本。有很多优秀的Swift库。有时需要OC和Swift混编。学习研究了一下FaceAware 人脸感知开源库。 Swift方法传多值参数及OC调用 ...

    OC调用传多值参数Swift方法的处理

    截止目前, Swift 已经达到4.2版本。有很多优秀的Swift库。有时需要OC和Swift混编。例如 FaceAware 人脸感知开源库。

    Swift方法传多值参数及OC调用

    比如一个开源的图片处理框架,人脸感知库FaceAware
    FaceAware GitHub 地址页面,在Swift 内部可以这样设置一个已知Image和Frame的方法,即多值参数。

        func setLocalFaceImageAndFrame(aImage: UIImage?, aFrame: CGRect?) {
            let layer = self.imageLayer()
            layer.contents = aImage!.cgImage
            layer.frame = aFrame!
        }
    

    OC与Swift混编,在"ProjectName_iOS-Swift.h"的头文件中,并没有暴露出上述所写方法,若加上 @objc ,会报错

    Method cannot be marked @objc because the type of the parameter 2 cannot be represented in Objective-C
    

    不能运行。故调整如下:

    把多值参数封装成一个Dictionary,通过Dictionary传值处理。

        @objc
        public func setLocalFaceImageAndFrame(infoDic: NSDictionary) {
            let aImage = infoDic["image"] as! UIImage
            let aFrame = infoDic["frame"]
            
            let layer = self.imageLayer()
            layer.contents = aImage.cgImage
            layer.frame = aFrame as! CGRect
        }
    

    附加:
    FaceAware https://github.com/BeauNouvelle/FaceAware

    展开全文
  • 我们有一个项目许久未更新了,所以代码有很长一段时间没有运行过,这两天想参考原项目的功能和设计,所以要运行起来安装到设计人员手机中,给她作为设计的参考,但是运行起来出错不断,原先可以顺利运行的项目报错了...

    前言

    hihi,勇敢的小伙伴儿们大家好,我们有一个项目许久未更新了,所以代码有很长一段时间没有运行过,这两天想参考原项目的功能和设计,所以要运行起来安装到设计人员手机中,给她作为设计的参考,但是运行起来出错不断,原先可以顺利运行的项目报错了。

    面对这些突如其来的问题,不怂,错误不可避免,解决就可以了。

    正文

    因为项目是混编的原因,Swift的使用直接导致了这次错误的出现。

    问题出现及解决步骤如下:

    首先,Xcode提示:

    意思就是Xcode10.1不支持的Swift3.x

    那哪里用的Swift3.x呢?不妨编译一下看看。出现错误如图:

     

    很清晰了,分别在以上几个马赛克target中使用了Swift3.0,那么如何解决这个问题呢?

    在Target中找到Build Settings在搜索框搜索swift language~

    把Swift Language Version修改成支持的Swift版本就可以了~

    再运行就不会出现上述错误,但是可能会出现别的问题,如果提示OC调用Swift文件中的方法找不到的时候,下面的做法可能会帮助到你:

    在类前加@objcMembers就能顺利生成OC方法直接调用就可以啦~

    运行项目->成功运行(耶)

    如有问题,还请大家指出,多谢各位~

    展开全文
  • OCswift相互调用

    2017-04-26 11:39:33
    一、OC调用swift文件 二、swift调用OC文件 三、注意和总结 添加: 四、自定义桥接文件  一、OC调用swift文件  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定...
  • OC项目引入使用swift编写的三方库后,报错 错误描述:The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set ...
  • 所以慢慢多了很多OC混编Swift的项目,但是其实swift调用OC还是挺简单的,把OC项目慢慢转成swift问题不大。swift可以算是OC更上层的语言,我这里说的坑都是关于SwiftOC的,很奇葩吧,还有把Swift项目转成OC的,一句...
  • 一、MySingle类 import Foundation class MySingle{ //定义单例的属性 var name:String? var age:Int? var height:Double?... //定义类方法 class func shareInstance()->MySingle{ struct qzSingle
  • 一、OC调用swift文件  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定创建桥接文件,Xcode会自动创建一个桥接文件 名字:工程名-Bridging-Header.h 这个桥接文件是 swift...
  • 由于本人在开发过程中主要用的是OC语言,所以pod的都是OC库,Podfile里又没加use_frameworks!所以一直都是.a类型的。后来因为需求需要用到一个只有swift版本的库,就使用use_frameworks!将所有.a库变成了.framework...
  • 最近在一个混编项目中,一个OC类需要去访问一个Swift类,访问其他Swift类都可以,但就没法访问报以下错误: 点进去看发现该类型是个结构体,如下所示: 解决方案:因为Swift的结构体除了不能继承外可以有自己的成员变量和...
  • 很多小伙伴在xcode8 中升级swift3.0编译工程时会出现 #import “项目名-Swift.h”失效问题 本人总结了一下,请看一下步骤: 1、Target-> Bulid Settings ->输入packa 设置Defines Module 为Yes 2、设置Product ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 错误信息: dyld: Library not loaded: @rpath/libswiftCore.dylib  Referenced from: /private/var/mobile/Containers/Bundle/Application/1348BA9E-21D9-4A31-A03A-B3C801EF6D98/UcanService.app/...
  • #### 1、OC工程项目导入Swift 版本的framework静态库后,模拟器和真机编译都通过,但是模拟器环境下无法调用库里面的类,真机环境可以 #### 2、如果是Swift项目工程引入这个Swift静态库没有任何问题 1、 真机可以...
  • 1.在OC调用Swift语言的代码 在使用OC编写的工程中创建Swift语言的代码,创建的时候会给出一个是否创建OC语言的桥梁,选择创建 ,目的是引入OC 语言的头文件的,是让Swift语言执行OC 语言程序的。并不是让OC运行...
  • 今天介绍一下在OC文件中声明了一个枚举类型,如何在Swift文件中调用该枚举类型的值。 1.项目工程构建的时候选的是Swift语言,项目名称TestProject。 2.建立一个Swift文件SwiftTestFile.swift 和一个OC的文件 ...
  • 概述 Swift的设计的初衷就是摆脱...随着Swift的改进及Swift开源项目剧增,越来越多的Objective-C工程开始使用Swift混编,不管是在基于Swift工程中或者Objective-C工程中,Swift和Objective-C文件都可以无缝结合。本文
1 2 3 4 5 ... 20
收藏数 1,798
精华内容 719
关键字:

oc调用swift方法 报错