文章目录
  1. 1. objecttive-c与swift混编
    1. 1.1. title: objecttive-c与swift混编date: 2020-04-29categories: swift object-ctags: 混编
      1. 1.1.1. objecttive-c与swift混编
        1. 1.1.1.1. 一. 如何在objective-c的工程中使用swift
        2. 1.1.1.2. 二. swift工程中调用objective-c代码

objecttive-c与swift混编


title: objecttive-c与swift混编
date: 2020-04-29
categories: swift object-c
tags: 混编

objecttive-c与swift混编

一. 如何在objective-c的工程中使用swift

如果已经有了一个老的iOS应用,它是使用Objective-C编写的,而它的一些新功能需要采用Swift来编写,这时就可以从Objective-C调用Swift。

Objective-C调用Swift时不需要桥接头文件,而是需要Xcode生成的头文件。这种文件由Xcode生成,不需要我们维护,对于开发人员也是不可见的。如图18-11所示,它能够将Swift中的类暴露给Objective-C,它的命名是:<工程名>-swift.h。我们需要将该头文件引入到Objective-C文件中,而且Swift中的类需要声明为 objc(凡是继承至NSObject的类不需要声明)。

18-11:
18-11

  1. 建立一个SingleApp的工程,基于objecttive-c的

18-12

  1. 新建一个swift类,继承自NSObject,写个简单的方法
    • SwiftClassDemo:
    
import Foundation

class SwiftClassDemo: NSObject {
<!--more-->

    func sayHello()->Void{
        print("hello");
    }
    
    func saygoodBye(greeting:String,withName:String)->String{
        return "say:\(greeting),my name is \(withName)";
    }
}
  1. 调用Swift类中的方法
    18-13

二. swift工程中调用objective-c代码

  • 在Swift工程中添加Objective-C类

我们刚刚创建了Swift的工程,还需要调用其他Objective-C类来实现某些功能,需要添加Objective-C类到Swift工程中。具体过程是,右键选择HelloWorld组,然后选择菜单中的“New File…”弹出新建文件模板对话框,如图18-6所示,选择“OS X→Source→Cocoa Class”。
18-6

图 18-6 新建文件模板

接着单击“Next”按钮,随即出现如图18-7所示的界面。在Class中输入“ObjCObject”,在Language中选择Objective-C,其他的选项保持默认值就可以了。

相关选项设置完成后,单击“Next”按钮,进入保存文件界面,根据提示选择存放文件的位置,然后单击“Create”按钮创建Objective-C类。如果是第一次创建Objective-C类,那么保存完成的时候,Xcode会提示我们是否添加桥接头文件,如图18-8所示,弹出一个对话框,我们应该选择“Yes”,之后会在工程中创建桥接头文件HelloWorld-Bridging-Header.h。

18-8

  • 调用代码
    Objective-C的ObjCObject创建完成后,我们会在Xcode工程中看到新增加的两个文件ObjCObject.h和ObjCObject.m。本书并不打算过多地介绍Objective-C语言,但为了更好地理解Swift与Objective-C的互相调用,我们还是简单地解释一下Objective-C代码。

ObjCObject.h代码如下:


 #import <Foundation/Foundation.h>                                        ①

 interface ObjCObject : NSObject                                         ②

-(NSString*)sayHello:(NSString*)greeting withName: (NSString*)name;      ③

 end

ObjCObject.h文件是Objective-C的头文件,我们在这里定义类,声明类的成员变量和方法。第①行代码引入Foundation框架的头文件。第②行代码定义类ObjCObject,它继承自NSObject父类。NSObject类是所有Objective-C的根类。第③行代码声明了实例方法sayHello: withName:,它有两个参数greeting和name。

ObjCObject.m代码如下:

 #import "ObjCObject.h"                                                      ①

 implementation ObjCObject

-(NSString*)sayHello:(NSString*)greeting withName: (NSString*)name          ②
{
NSString *string = [NSStringstringWithFormat: "Hi,%  % .",name,greeting];
return string;
}

 end

上述代码第①行引入ObjCObject.h头文件,第②行代码定义sayHello: withName:方法。

下面我们再来看看Swift调用文件main.swift的代码:

import Foundation                                                ①

var obj : ObjCObject = ObjCObject()                               ②
var hello = obj.sayHello("Good morning", withName:"Tony")        ③

println(hello)                                                   ④

last

文章目录
  1. 1. objecttive-c与swift混编
    1. 1.1. title: objecttive-c与swift混编date: 2020-04-29categories: swift object-ctags: 混编
      1. 1.1.1. objecttive-c与swift混编
        1. 1.1.1.1. 一. 如何在objective-c的工程中使用swift
        2. 1.1.1.2. 二. swift工程中调用objective-c代码