swift调用oc文件_swift 项目中 oc文件调用oc文件 - CSDN
  • 在目录中创建OC相关文件 // // SumNumbers.h // Dome2test // // Created by 郭文亮 on 2018/11/23. // Copyright © 2018年 finalliang. All rights reserved. // #import <Foundation/Foundation....

    在目录中创建OC相关文件

    //
    //  SumNumbers.h
    //  Dome2test
    //
    //  Created by 郭文亮 on 2018/11/23.
    //  Copyright © 2018年 finalliang. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface SumNumbers : NSObject
    //添加一个整形属性
    @property(nonatomic,assign) int type;
    //添加一个方法,传入两个整形参数,并返回两个整形参数的和
    - (int)sum:(int)number1 andNumber2:(int)number2;
    @end
    
    ----------------------------------------------------------------------------------------
    
    //
    //  SumNumbers.m
    //  Dome2test
    //
    //  Created by 郭文亮 on 2018/11/23.
    //  Copyright © 2018年 finalliang. All rights reserved.
    //
    
    #import "SumNumbers.h"/Users/finalliang/Desktop/code/Dome2test/Dome2test/menu.json
    
    @implementation SumNumbers
    - (int)sum:(int)number1 andNumber2:(int)number2{
        return number1 + number2;
    }
    
    @end
    ----------------------------------------------------------------------------------------
    //
    //  Use this file to import your target's public headers that you would like to expose to Swift.
    //
    //在桥接头文件中,引入类的头文件
    #import "SumNumbers.h"
    

    最后在视图控制器中直接调用即可

    //
    //  ViewController.swift
    //  Dome2test
    //
    //  Created by 郭文亮 on 2018/11/23.
    //  Copyright © 2018年 finalliang. All rights reserved.
    //
    import UIKit
    class ViewController: UIViewController {
        
        //MARK: -
        //MARK: viewDidLoad
        override func viewDidLoad() {
            super.viewDidLoad()
            let sumNumber = SumNumbers()
            let result = sumNumber.sum(1,andNumber2: 2)
            print("The result:\(result)")
        }
        
        override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }
    }
    

     

    展开全文
  • 在桥接头文件里#import oc的.h文件,整个swift工程都能使用该oc文件,在.h里暴露的方法都能被该工程使用 //oc文件 TestOC.h #import @interface TestOC : NSObject - (void)sayHello...
    swift里混编oc
    
    在桥接头文件里#import oc的.h文件,整个swift工程都能使用该oc文件,在.h里暴露的方法都能被该工程使用

    //oc文件
    TestOC.h

    #import

    @interface TestOC : NSObject

    - (void)sayHello;

    - (void)sayWhat:(NSString *)name andAge:(NSString *)age;

    + (void)sayHelloTwo;

    @end


    TestOC.m

    #import "TestOC.h"

    @implementation TestOC

    - (void)sayHello

    {

        NSLog(@"hello to you");

    }

    - (void)sayWhat:(NSString *)name andAge:(NSString *)age

    {

        NSLog(@"%@,%@",name,age);

    }

    + (void)sayHelloTwo

    {

        NSLog(@"i want to make friend with you");

    }

    @end


    桥接头文件

    #import "TestOC.h"


    swift文件

    调用oc文件的方法

    let he = TestOC()

            he.sayHello()


            he.sayWhat("achao",andAge:"22")

    TestOC.sayHelloTwo()


    可以很清晰的看见在swift里调用oc的多参函数时,函数第一部分成为swift函数的名称出现在括号之前,然后函数的第一个参数没有名字,函数剩下的部分座位swift函数对应的参数名称,就是label

    调用类方法直接是类名使用点语法调用,调用多参类函数,以此类推


    展开全文
  • OCswift相互调用

    2017-04-26 11:39:33
    二、swift调用OC文件 三、注意和总结 添加: 四、自定义桥接文件  一、OC调用swift文件  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定创建桥接文件,Xcode会...

    一、OC调用swift文件

    二、swift调用OC文件

    三、注意和总结

    添加:

    四、自定义桥接文件 

    一、OC调用swift文件

      在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定创建桥接文件,Xcode会自动创建一个桥接文件

    名字:工程名-Bridging-Header.h

    这个桥接文件是 swift 调用OC文件的时候用的

    1、

      进入TARGETS ->Build Settings -> Packaging 中

    设置Defines Module为YES

    设置 Product Module Name ,也可以不设置,默认为工程的名字。这个在后面会用到

    2、

      在swift写一个类

    注意这个类一定要继承NSObject,不然在OC中没法用

    class hello: NSObject {

        var address : String
        var gender: String
       
        init(address:String,gender:String){
            self.address = address
            self.gender = gender
        }
       
        func method() {
            print("message \(self.address + self.gender)")
        }
    }

    3、

      在OC需要用到的swift文件中 导入文件 "Product Module Name -Swift.h"  因为 Product Module Name 默认是工程的名字

    所以直接导入 #import "工程名-Swift.h"

    4、

      记着写完先command +B编译一下,如果没有报错就可以在OC文件调用swift中的类了

    hello *helloss = [[helloalloc]initWithAddress:@"上海"gender:@"男"];
    [helloss method];

     

    二、swift调用OC文件

      在swift项目中创建一个OC文件的时候,Xcode 会提示创建一个桥接文件 点确定创建桥接文件,Xcode会自动创建一个桥接文件

    名字:工程名-Bridging-Header.h

      把swift需要用到的OC文件的头文件放到桥接文件里 工程名-Bridging-Header.h

    例如:

    1、

    这个就是一个OC文件
    //#import "sec.h"
    #import <UIKit/UIKit.h>
    @interface sec : UIViewController
    -(void)actionMake;
    @end
     

    2、

    在桥接文件中把需要用到OC的头文件导入进去
    #import "sec.h"
     

    3、

    编译一下,就可以在swift中用swift的语法调用OC文件的方法了
    let second = sec()
    second.actionMake()

     

    三、注意和总结

    注意:

    1、OC项目在导入swift文件前 先按照系统提示创建桥接文件,
    2、在 targets -> Build Settings -> Packaging  中设置Defines Module 为YES
    3、在OC中调用swift文件的时候,swift中的类 要继承NSObject
    不然没办法在OC中调用
    4、OC中调用swift文件需要导入”工程名 -Swift.h"
         (这个是build Setting -> Packaging->Product Module Name 的名字,而这个属性默认是工程的名字)
    5、写完记得command + B 编译 一下
    6、swift项目 引用OC文件也需要创建 桥接文件,在这个桥接文件中导入OC文件的头文件
    7、桥接文件只有一个,作用只是为了 swift 引用OC文件,OC引用swift 文件虽然也需要创建桥接文件
            但是不需要在桥接文件中 导入swift文件
    8、如果一个项目既有OC引用swift 也有swift引用OC ,就先设置OC调用swift文件
         在桥接文件 导入OC文件,OC可以定义PCH文件导入”工程名 -Swift.h" 

     

     

    四、自定义桥接文件 

     

    如果不用Xcode提示创建桥接文件也可以自定义一个桥接文件

     

    1     使用 Header File  把里面的内容清空。

     

    2、 这文件名可以自定义, 一般还是用 工程名-Bridging-Header.h   例如app - file.h

     

    3    然后在 Build Setting -> Swift Compiler - Code Generation中

     

    4、设置Objective-C Bridging Header 为自定义的桥接文件相对于工程的绝对路径,也就是项目总文件夹的路径,如果在第一层,就直接写自定义的桥接文件的名file.h,如果在下一层,文件夹/桥接文件 app/file.h 
    展开全文
  • SwiftOC 互相调用

    2018-07-20 16:19:07
    Swift 调用 OC Swift 调用 OC 分为两种常见情况,一种是直接在 Application 的 project 中使用;另一种情况是,在 framework 开发中使用。 对于互相调用的原理,如下图所示,更详细的内容可以参考 《Using Swif ...

    Swift 调用 OC

    Swift 调用 OC 分为两种常见情况,一种是直接在 Application 的 project 中使用;另一种情况是,在 framework 开发中使用。

    对于互相调用的原理,如下图所示,更详细的内容可以参考 《Using Swif with Cocoa and Objective-C》

    这里写图片描述

    图 一

    其中最关键的就是三个文件 bridging header(app)、umbrella header(framework)、generated header(swift to OC)。所以主要工作就在于如何生成和指定这些文件。

    Application

    在一个 Swift 开发的工程中可以通过两种方法来生成桥接文件。

    第一种是,直接拖拽 OC 文件到工程中,此时系统会询问是否生成桥接文件,如图:

    这里写图片描述

    选择 “Create Bridging Header” Xcode 就会自动生成桥接需要的文件和修改相关配置。

    另外一种方式是自己指定。桥接文件的命名方式为:ProjectName-Bridging-Header.h,所以先按照这个格式生成一个头文件,然后在 “Build Settings” -> “Swift Compiler - General” -> “Objective-C Bridging Header” 处指定桥接头。

    设置完成后,只要在桥接头中引用相应的 OC 文件就可以在工程中的 Swift 文件中使用对应的 OC 类和方法。

    framework

    framework 中不允许使用桥接头的方式(即不允许指定 “Objective-C Bridging Header” 的值)。在新建一个 framework 的 Project 时,会自动生成一个同名的头文件。比如新建一个工程为 DuAR 的fraework,会自动生成 DuAR.h 文件,这个文件就是 “umbrella header”,如果在这个工程中用到了 OC 源文件或者 OC 写的三方库,就可以在这里引入对应的头文件,从而实现工程中的 Swift 可以使用 OC 类和方法。

    关于 “umbrella header” 还有一个叫 “umbrella framework” 的东西,可以实现 A framework 包含 B framework,但是这种方式不推荐使用。具体请搜索。

    OC call Swift

    在我们新建完一个 Swift 工程的时候,“Swift Compiler - General” 里会有一个叫做 “Objective-C Generated Interface Header Name” 的选项,这个选项里的值为 “ProjectName-Swift.h”,这个文件就是系统生成的 Swift 文件对应的 Objective-C 的头文件。

    当在 OC 文件中调用 Swift 文件中的类的时候,首先在 OC 文件中引用上面提到的头文件,即 #import "ProjectName-Swift.h"。这个文件虽然在工程中看不到,但是她真实存在,编译后,你可以按住Command+单击该文件名,就会看到具体生成的代码。
    引入后,具体类的使用,直接按照OC的方式使用即可。

    这个方法适用于 Application 工程和 framework 工程。

    注意事项

    相比于 OC 的灵活和强大的运行时,Swift 强调更高的安全性。所以 Swift 的运行时很弱,强类型等特点使得未声明为支持 OC 的 Swift 类和方法是不能通过桥接的方式在 OC 文件中使用的。

    如果需要一个 Swift 的类或方法在 OC中可以使用,则必须通过标记的形式告知编译器,即图一中的 @class,同时还有 @objc 等。或者这个类可以直接继承自 NSObject 或其子类,这样也能实现 Swift 类或方法在 OC 中被调用。

    Swift 中有许多 OC 没有的特性。比如,Swift 有元组、特有的枚举等。这些特性也不能够在 OC 中使用。所以,要使用的混编文件要注意 Swift 独有属性问题。

    展开全文
  • OC调用SwiftOC调用Swift方法比较简单。但是需要注意以下几点: 1.需要在当前OC类里导入xxx-Swift.h头文件,其中xxx为项目名称(与你的项目配置相关,具体配置方式见上一篇文章) 2.OC类里仅可以调用public的Swift...
  • [Swift]1.在OC项目里的OC代码调用Swift方法,Swift代码里调用OC代码。2.在Swift项目里的Swift代码里调用OC代码,OC代码调用Swift方法。
  • swift调用oc的方法: 1、桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2、将需要引用的oc文件 .h头文件 添加到桥接类中。   如下: 然后在swift...
  • 前面把私有库建立好了,但是在swift工程中调用库时,category中的方法调用不到。尝试了很久之后,发现category中的类方法可以调,但是实例方法不行,所以暂时解决方案是将实例方法改成类方法,将实例以参数的方式传...
  • Swift调用OC之NSArray

    2015-03-02 19:59:38
    // Swift调用OC之NSArray // // 1.NSArray与Array的互相转换: // 2.NSArray初始化 // 3.NSArray的常用属性和方法 //  --获取成员个数 //  --获取数组第一个元素 //  --获取数组最后一个元素 //  --...
  • swift调用oc: 需要在统一的bridge头文件(xxx-Bridging-Header.h)里面import,然后即可使用。 oc调用swift: 需要在暴露出来的方法和属性上加@objc否则不可用。需要在工程配置里面做一些小改动。 具体设置和内容...
  • //***********************...// >>>>>>>Swift调用OC文件操作-NSBundle // // NSBundle内含有: // -- info.plist:这是必须要有的文件,用来配置应用的基本参数信息 // -- 可执行文件 // -- 资源文件:如图像
  • 在iOS应用的开发中,Swift必将取代OC,两者的趋势是“短期共存,长期取代”。... 我这里会实现一个简单的Swift调用OC的iOS实例,实现过程是十分的简单的。就像我们所有的Hello World一样。具体操作步骤如下:
  • Swift4与OC的混编

    2019-03-06 11:43:05
    一、OC调用swift文件 在OC项目中创建一个swift文件的时候,Xcode 会提示 需要...这个桥接文件是 swift 调用OC文件的时候用的 1.配置 进入TARGETS -&amp;gt;Build Settings -&amp;gt; Packaging 中设置Def...
  • SwiftOC的混编

    2019-04-19 16:56:37
    一、OC调用swift文件  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要... 这个桥接文件是 swift 调用OC文件的时候用的 1.配置 进入TARGETS -&amp;amp;gt;Build Settings -&amp;amp;g...
  • 2017.06.02 23:55* 字数 275 阅读 1619评论 0...方法:使用桥接文件进行桥接,进行使用。 具体过程 本文以现今比较流行的AFNetworking作为例子。现今只有OC库。 pod的安装不再阐述。 1️⃣创建一个示例工程:T...
  • 原创Blog,转载请注明出处 ...很多Github的库经过很多年的发展,源码都是OC写的,,所以,用Swift调用OC的库就是开发中难免遇到的的一个问题,本文以AFNetworking为例,讲解如何跨语言调用。第一步创
  • Swift调用OC第三方框架

    2017-08-31 10:07:50
    1.在项目中添加一个Briding-Header.h文件 2.在Xcode->Target-->ild settings--->objective-c Bridgin-Header中添加 项目名字/.h文件的全称. 3.在Briding-Header.h文件中添加你想使用的第三方框架 相关的头文件后就...
  • 新建 .h文件,导入“XMPP.h"  #import “XMPP.h"  在buildSetting中 SwiftCompiler 添加Object C head
  • swift 调用oc委托

    2015-12-24 13:11:52
    如下委托在swift代码中的实现 @protocol NotifyMessageDelegate NSObject> // 连接服务器消息 - (void) OnConnect:(BOOL) bSuccess; // 用户登陆消息 - (void) OnLogin:(int) dwUserId : (int) ...
  • 前两天刚写过Swift调用OC,今天在原来的基础上,实现OC调用Swift。首先,创建一个OneSwiftFile.swift文件,创建一个继承于NSObject的类(这个地方你可以自己选择继承的父类)然后在类中创建几个方法,方便在OC文件中...
1 2 3 4 5 ... 20
收藏数 9,488
精华内容 3,795
关键字:

swift调用oc文件