objective-c调用swift
2018-04-25 12:47:00 weixin_33946020 阅读数 10

在Objective-C中使用Swift,步骤相似:

1、首先创建一个Objective-C的项目:


Paste_Image.png

2.加入一个Swift的类文件:


Paste_Image.png

3、点击Next,弹出一个对话框,选择YES


Paste_Image.png

4、生成一个YourProject-Bridging-Header.h文件。在本项目中生成的文件例如以下图:


Paste_Image.png

5、在SwiftClass创建类例如以下:

  import Foundation

   class SwiftTest : NSObject {
    func test()->NSString{
    return "test"
   }
 }

6、在ViewController调用SwiftTest类例如以下:

  #import "ViewController.h"

  #import "ObjectiveTest-Swift.h"  //这里注意和项目名称一致  "YourProject-Swift.h"

7、import之后一定要先编译一次,否则编译出错。
8、编译之后就能够在类里面调用了例如以下:

    - (void)viewDidLoad {
        [super viewDidLoad];
      // Do any additional setup after loading the view, typically from a nib.

       SwiftTest *tests = [SwiftTest new];
       [tests test];
  }
2014-10-07 10:30:00 weixin_33928137 阅读数 8

假设已经有了一个老的iOS应用,它是使用Objective-C编写的,而它的一些新功能须要採用Swift来编写,这时就能够从Objective-C调用Swift。

Objective-C调用Swift时不须要桥接头文件,而是须要Xcode生成的头文件。这种文件由Xcode生成,不须要我们维护,对于开发者也是不可见的。例如以下图所看到的,它能够将Swift中的类暴露给Objective-C,它的命名是:<project名>-swift.h。我们须要将该头文件引入到Objective-C文件里,并且Swift中的类须要声明为@objc。

创建Objective-Cproject

为了能够更好地介绍混合搭配调用,我们首先创建一个Objective-Cproject。出于简单考虑,我们能够创建一个Mac OS X命令行project。

启动Xcode 6,然后单击File→New→Project菜单,在打开的Choose atemplate for your new project界面中选择“OS X→Application→Command Line Tool”project模板(例如以下图所看到的)。


接着单击“Next”button,随即出现例如以下图所看到的的界面。


在Product Name中输入“HelloWorld”,在Language中选择Objective-C,其它的项目能够结合自己的实际情况输入内容。相关的project选项设置完毕后,单击“Next”button,后面的步相似。

创建成功后的界面例如以下图所看到的,在左边的导航栏中生成了一个main.m文件。打开main.m文件,能够在右边的代码界面中看到它的代码,我们还能够在这里编写代码。


在Objective-Cproject中加入Swift类

我们刚刚创建了Objective-C的project,须要加入Swift类到project中。详细过程是,右键选择HelloWorld组,选择菜单中的“New File…”弹出新建文件模板对话框。例如以下图所看到的,选择OS X→Source→Cocoa Class。


接着单击“Next”button,随即出现如图下所看到的的界面。在Class中输入“SwiftObject”,在Language中选择Swift,其它的选项保持默认值就能够了。


相关选项设置完毕后,单击“Next”button,进入保存文件界面,依据提示选择存放文件的位置,然后单击“Create”button创建Swift类。假设project中没有桥接头文件,在创建过程中,Xcode也会提示我们是否加入桥接头文件,能够选择不加入。

调用代码

Swift的SwiftObject创建完毕后,我们会在Xcodeproject中看到新添加的SwiftObject.swift文件。

SwiftObject.swift代码例如以下:

 

import Foundation                                                               ①
 
@objc class SwiftObject: NSObject {                     ②
 
Func sayHello(greeting : String, withName name : String) ->String {      ③
 
var string = "Hi," + name
string += greeting
 
return string;
    }
}

上述代码第①行引入了Foundation框架的头文件。第②行代码定义SwiftObject类,SwiftObject类继承自NSObject类。另外,我们在类前面声明为@objc,@objc所声明的类能够被Objective-C訪问,@objc还能够修饰属性。

第③行代码定义了sayHello方法,它有两个參数,第一个參数不须要指定外部參数名,第二个參数(除了第一个以后全部的參数)须要指定外部參数名,比如withName是name參数的外部參数名。这是为了方便在Objective-C中调用。

以下看Objective-C端的代码,main.m文件代码例如以下:

#import <Foundation/Foundation.h>
#import "HelloWorld-swift.h"                            ①
 
int main(intargc, const char * argv[]) {
 
SwiftObject *sobj = [[SwiftObjectalloc] init];          ②
NSString *hello = [sobjsayHello:@"Good morning"withName:@"Tony"];        ③
 
NSLog(@"%@",hello);                                                         ④
 
return 0;
}

 上述代码第①行引入头文件HelloWorld-swift.h,它是Objective-C调用Swift对象所必需的,它的命名规则是“<project名>-swift.h”。

第②行代码实例化SwiftObject对象,SwiftObject是Swift中定义的类。第③行代码调用SwiftObject的sayHello方法,它在Objective-C中被调用时的方法和參数命名与SwiftObject的方法和參数之间的相应关系例如以下图所看到的。

 


第④行代码NSLog(@"%@",hello)用于输出结果,输出结果例如以下:

2014-07-05 14:25:43.879HelloWorld[3266:303] Hi,TonyGood morning

这样就实现了在Objective-C中调用Swift代码,我们能够借助于这种调用充分利用已有的Swift文件,降低反复编写代码,提高工作效率。


很多其它内容请关注国内第一本Swift图书《Swift开发指南》
本书交流讨论站点:http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

欢迎关注智捷iOS课堂微信公共平台



2014-08-17 17:09:49 iteye_1521 阅读数 26

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

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

创建Objective-C工程

为了能够更好地介绍混合搭配调用,我们首先创建一个Objective-C工程。出于简单考虑,我们可以创建一个Mac OS X命令行工程。

启动Xcode 6,然后单击File→New→Project菜单,在打开的Choose atemplate for your new project界面中选择“OS X→Application→Command Line Tool”工程模板(如下图所示)。

 

接着单击“Next”按钮,随即出现如下图所示的界面。

 

在Product Name中输入“HelloWorld”,在Language中选择Objective-C,其他的项目可以结合自己的实际情况输入内容。相关的工程选项设置完成后,单击“Next”按钮,后面的步类似。

创建成功后的界面如下图所示,在左边的导航栏中生成了一个main.m文件。打开main.m文件,可以在右边的代码界面中看到它的代码,我们还可以在这里编写代码。

 

在Objective-C工程中添加Swift类

我们刚刚创建了Objective-C的工程,需要添加Swift类到工程中。具体过程是,右键选择HelloWorld组,选择菜单中的“New File…”弹出新建文件模板对话框。如下图所示,选择OS X→Source→Cocoa Class。

 

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

 

相关选项设置完成后,单击“Next”按钮,进入保存文件界面,根据提示选择存放文件的位置,然后单击“Create”按钮创建Swift类。如果工程中没有桥接头文件,在创建过程中,Xcode也会提示我们是否添加桥接头文件,可以选择不添加。

调用代码

Swift的SwiftObject创建完成后,我们会在Xcode工程中看到新增加的SwiftObject.swift文件。

SwiftObject.swift代码如下:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. import Foundation                                                               ①  
  2.    
  3. @objc class SwiftObject: NSObject {                     ②  
  4.    
  5. Func sayHello(greeting : String, withName name : String) ->String {      ③  
  6.    
  7. var string = "Hi," + name  
  8. string += greeting  
  9.    
  10. return string;  
  11.     }  
  12. }  

 

上述代码第①行引入了Foundation框架的头文件。第②行代码定义SwiftObject类,SwiftObject类继承自NSObject类。另外,我们在类前面声明为@objc,@objc所声明的类能够被Objective-C访问,@objc还可以修饰属性。

第③行代码定义了sayHello方法,它有两个参数,第一个参数不需要指定外部参数名,第二个参数(除了第一个以后所有的参数)需要指定外部参数名,例如withName是name参数的外部参数名。这是为了方便在Objective-C中调用。

下面看Objective-C端的代码,main.m文件代码如下:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. #import <Foundation/Foundation.h>  
  2. #import "HelloWorld-swift.h"                            ①  
  3.    
  4. int main(intargc, const char * argv[]) {  
  5.    
  6. SwiftObject *sobj = [[SwiftObjectalloc] init];          ②  
  7. NSString *hello = [sobjsayHello:@"Good morning"withName:@"Tony"];        ③  
  8.    
  9. NSLog(@"%@",hello);                                                         ④  
  10.    
  11. return 0;  
  12. }  

 

 

 上述代码第①行引入头文件HelloWorld-swift.h,它是Objective-C调用Swift对象所必需的,它的命名规则是“<工程名>-swift.h”。

第②行代码实例化SwiftObject对象,SwiftObject是Swift中定义的类。第③行代码调用SwiftObject的sayHello方法,它在Objective-C中被调用时的方法和参数命名与SwiftObject的方法和参数之间的对应关系如下图所示。

 

 

第④行代码NSLog(@"%@",hello)用于输出结果,输出结果如下:

2014-07-05 14:25:43.879HelloWorld[3266:303] Hi,TonyGood morning

这样就实现了在Objective-C中调用Swift代码,我们可以借助于这样的调用充分利用已有的Swift文件,减少重复编写代码,提高工作效率。

 

 

更多内容请关注国内第一本Swift图书《Swift开发指南》
本书交流讨论网站:http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

 

 

 

 

欢迎关注智捷iOS课堂微信公共平台

2014-08-15 14:44:43 tonny_guan 阅读数 18677

Swift调用Objective-C需要一个名为“<工程名>-Bridging-Header.h”的桥接头文件,如下图所示。桥接头文件的作用是为Swift调用Objective-C对象搭建一个桥,它的命名必须是“<工程名>- Bridging-Header.h”,我们需要在桥接头文件中引入Objective-C头文件,而且桥接头文件是需要管理和维护的。

 

创建Swift工程
为了能够更好地介绍混合搭配调用,我们首先创建一个Swift工程。出于简单考虑,我们可以创建一个Mac OS X命令行工程,而不是一个iOS工程。
启动Xcode 6,然后单击File→New→Project菜单,在打开的Choose a template for your new project界面中选择“OS X→Application→Command Line Tool”工程模板

 
接着单击“Next”按钮,随即出现如下图所示的界面。
 
我们可以按照提示并结合自己的实际情况和需要输入相关内容。下面简要说明一下图18-3中的工程选项。
Product Name:工程名。
Organization Name:组织名。
Organization Identifier:组织标识(很重要)。一般情况下,这里输入的是组织名或公司的域名(如net.cocoagame),类似于Java中的包命名。
Bundle Identifier:捆绑标识符(很重要)。该标识符由Product Name + Organization Identifier构成。因为在App Store上发布应用的时候会用到它,所以它的命名不可重复。
Language:开发语言选择。在这里我们可以选择开发应用所使用的语言,在Xcode 6中可以选择Swift和Objective-C。
相关工程选项设置完成后,单击“Next”按钮,进入下一级界面。根据提示选择存放文件的位置,然后单击“Create”按钮,出现如下图所示的界面。
 
在左边的导航栏中打开main.swift文件,会看到如下图所示的代码界面,我们可以在这里编写Swift代码。
 
在Swift工程中添加Objective-C类
我们刚刚创建了Swift的工程,还需要调用其他Objective-C类来实现某些功能,需要添加Objective-C类到Swift工程中。具体过程是,右键选择HelloWorld组,然后选择菜单中的“New File…”弹出新建文件模板对话框,如下图所示,选择“OS X→Source→Cocoa Class”。
 
接着单击“Next”按钮,随即出现如下图所示的界面。在Class中输入“ObjCObject”,在Language中选择Objective-C,其他的选项保持默认值就可以了。
 
相关选项设置完成后,单击“Next”按钮,进入保存文件界面,根据提示选择存放文件的位置,然后单击“Create”按钮创建Objective-C类。如果是第一次创建Objective-C类,那么保存完成的时候,Xcode会提示我们是否添加桥接头文件,如下图所示,弹出一个对话框,我们应该选择“Yes”,之后会在工程中创建桥接头文件HelloWorld-Bridging-Header.h。
 
调用代码
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


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


println(hello)
上述代码第①行的import Foundation语句是引入Foundation框架,类似于Objective-C的#import <Foundation/Foundation.h>语句,关于Foundation框架我们会在下一章介绍。
第②行代码声明并实例化ObjCObject类的实例obj。ObjCObject就是Objective-C里定义的ObjCObject。
第③行代码调用ObjCObject类的sayHello: withName:方法。要注意Swift调用时的方法名和参数与Objective-C中该方法的方法名和参数的对应关系,如下图所示。
 
第④行代码打印输出结果,输出结果如下:
Hi,Tony Good morning.
要使Swift能够调用Objective-C,还必须在桥接头文件中引入Objective-C头文件。HelloWorld- Bridging-Header.h代码如下:
#import "ObjCObject.h"
很简单,只有一行代码,如果还有其他的Objective-C头文件,都需要在此引入。
这样就实现了在Swift中调用Objective-C代码,我们可以借助于这样的调用充分地利用已有的Objective-C文件,减少重复编写代码,提供工作效率。
至此,整个工程创建完毕。如图所示,点击左上角的“运行”按钮 即可查看运行结果。
 




更多内容请关注国内第一本Swift图书《Swift开发指南》
本书交流讨论网站:http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

欢迎关注智捷iOS课堂微信公共平台






2014-08-15 14:51:08 iteye_1521 阅读数 12

Swift调用Objective-C需要一个名为“<工程名>-Bridging-Header.h”的桥接头文件,如下图所示。桥接头文件的作用是为Swift调用Objective-C对象搭建一个桥,它的命名必须是“<工程名>- Bridging-Header.h”,我们需要在桥接头文件中引入Objective-C头文件,而且桥接头文件是需要管理和维护的。

 

 

创建Swift工程
为了能够更好地介绍混合搭配调用,我们首先创建一个Swift工程。出于简单考虑,我们可以创建一个Mac OS X命令行工程,而不是一个iOS工程。
启动Xcode 6,然后单击File→New→Project菜单,在打开的Choose a template for your new project界面中选择“OS X→Application→Command Line Tool”工程模板

 

接着单击“Next”按钮,随即出现如下图所示的界面。

 

我们可以按照提示并结合自己的实际情况和需要输入相关内容。下面简要说明一下图18-3中的工程选项。
Product Name:工程名。
Organization Name:组织名。
Organization Identifier:组织标识(很重要)。一般情况下,这里输入的是组织名或公司的域名(如net.cocoagame),类似于Java中的包命名。
Bundle Identifier:捆绑标识符(很重要)。该标识符由Product Name + Organization Identifier构成。因为在App Store上发布应用的时候会用到它,所以它的命名不可重复。
Language:开发语言选择。在这里我们可以选择开发应用所使用的语言,在Xcode 6中可以选择Swift和Objective-C。
相关工程选项设置完成后,单击“Next”按钮,进入下一级界面。根据提示选择存放文件的位置,然后单击“Create”按钮,出现如下图所示的界面。

 

在左边的导航栏中打开main.swift文件,会看到如下图所示的代码界面,我们可以在这里编写Swift代码。

 

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

 

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

 

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

 

调用代码
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


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


println(hello)
上述代码第①行的import Foundation语句是引入Foundation框架,类似于Objective-C的#import <Foundation/Foundation.h>语句,关于Foundation框架我们会在下一章介绍。
第②行代码声明并实例化ObjCObject类的实例obj。ObjCObject就是Objective-C里定义的ObjCObject。
第③行代码调用ObjCObject类的sayHello: withName:方法。要注意Swift调用时的方法名和参数与Objective-C中该方法的方法名和参数的对应关系,如下图所示。
 
第④行代码打印输出结果,输出结果如下:
Hi,Tony Good morning.
要使Swift能够调用Objective-C,还必须在桥接头文件中引入Objective-C头文件。HelloWorld- Bridging-Header.h代码如下:
#import "ObjCObject.h"
很简单,只有一行代码,如果还有其他的Objective-C头文件,都需要在此引入。
这样就实现了在Swift中调用Objective-C代码,我们可以借助于这样的调用充分地利用已有的Objective-C文件,减少重复编写代码,提供工作效率。
至此,整个工程创建完毕。如图所示,点击左上角的“运行”按钮 即可查看运行结果。
 

 

 

 

 

 

更多内容请关注国内第一本Swift图书《Swift开发指南》
本书交流讨论网站:http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

 

 

 

 

欢迎关注智捷iOS课堂微信公共平台

Swift调用Objective-C

阅读数 520

Swift调用Objective-C需要一个名为“-Bridging-Header.h”的桥接头文件,如下图所示。桥接头文件的作用是为Swift调用Objective-C对象搭建一个桥,它的命名必须是“-Bridging-Header.h”,我们需要在桥接头文件中引入Objective-C头文件,而且桥接头文件是需要管理和维护的。 创建Swift工程为了能够更好地

博文 来自: liangliang2727

Objective-C调用Swift

阅读数 22691

Objective-C调用Swift如果已经有了一个老的iOS应用,它是使用Objective-C编写的,而它的一些新功能需要采用Swift来编写,这时就可以从Objective-C调用Swift。Objective-C调用Swift时不需要桥接头文件,而是需要Xcode生成的头文件。这种文件由Xcode生成,不需要我们维护,对于开发人员也是不可见的。如图18-11所示,它能够将Swift

博文 来自: tonny_guan

Objective-C调用Swift

阅读数 529

如果已经有了一个老的iOS应用,它是使用Objective-C编写的,而它的一些新功能需要采用Swift来编写,这时就可以从Objective-C调用Swift。Objective-C调用Swift时不需要桥接头文件,而是需要Xcode生成的头文件。这种文件由Xcode生成,不需要我们维护,对于开发人员也是不可见的。如下图所示,它能够将Swift中的类暴露给Objective-C,它的命名

博文 来自: liangliang2727

Swift调用Objective-C

阅读数 16

Swift调用Objective-C需要一个名为&lt;工程名&gt;-Bridging-Header.h的桥接头文件。桥接头文件的作用是为Swift调用Objective-C对象搭建一个桥,它的命名必须是&lt;工程名&gt;-Bridging-Header.h,我们需要在桥接头文件中引入Objective-C头文件,而且桥接头文件是需要管理和维护的。一、创建Swift工程为了能够更好...

博文 来自: jsntghf

Objective-c调用Swift

阅读数 639

在Objective-C中使用Swift,步骤类似:1、首先创建一个Objective-C的项目:Paste_Image.png2.添加一个Swift的类文件:Paste_Image.png3、点击Next,弹出一个对话框,选择YESPaste_Image.png4、生成一个Your

博文 来自: tubiebutu
没有更多推荐了,返回首页