如何从Swift调用Objective-C代码

前端之家收集整理的这篇文章主要介绍了如何从Swift调用Objective-C代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在来自Apple的新Swift语言中,如何调用Objective-C代码

苹果提到他们可以在一个应用程序中共存,但这是否意味着,可以在技术上重用Objective-C中创建的旧类,同时在Swift中构建新类。

推理

Objective-C是一个平台无关的语言,而Swift是平台相关的。因此,在Swift中编写非平台相关的代码(业务逻辑库)并不明智。但是,在其中编写与平台相关的代码(例如,接口相关)将是完美的。不是说这将是一个好主意,但它绝对是一个利益。

在Swift中使用Objective-C类

**
如果你有一个现有的类,你想使用,执行步骤2,然后跳到步骤5.(对于某些情况下,我不得不添加一个显式#import< Foundation / Foundation.h到一个较旧的Objective-C文件。)
**

步骤1:添加Objective-C实现 – .m

向您的类添加.m文件,并将其命名为CustomObject.m。

步骤2:添加桥接头

添加.m文件时,您可能会看到类似以下提示

点击YES!

如果没有看到提示或意外删除了您的桥接标头,请向您的项目添加一个新的.h文件,并将其命名为 -Bridging-Header.h。

在某些情况下,特别是在使用Objective-C框架时,你不需要显式地添加一个Objective-C类,Xcode找不到链接器。在这种情况下,创建如上所述命名的.h文件,然后确保将其路径链接到目标项目设置中,如下所示:

注意

最好的做法是使用$(SRCROOT)宏链接您的项目,以便如果您移动项目或使用远程存储库与其他人一起工作,它仍然可以工作。 $(SRCROOT)可以被认为是包含.xcodeproj文件的目录。它可能看起来像这样:

  1. $(SRCROOT)/Folder/Folder/<#YourProjectName#>-Bridging-Header.h

步骤3:添加Objective-C头 – .h

添加另一个.h文件并将其命名为CustomObject.h。

第4步:构建你的Objective-C类

在CustomObject.h中

  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface CustomObject : NSObject
  4.  
  5. @property (strong,nonatomic) id someProperty;
  6.  
  7. - (void) someMethod;
  8.  
  9. @end

在CustomObject.m中

  1. #import "CustomObject.h"
  2.  
  3. @implementation CustomObject
  4.  
  5. - (void) someMethod {
  6. NSLog(@"SomeMethod Ran");
  7. }
  8.  
  9. @end

步骤5:将类添加到桥接头

在你的项目 – 桥接 – 头.h:

  1. #import "CustomObject.h"

步骤6:使用对象

在SomeSwiftFile.swift:

  1. var instanceOfCustomObject: CustomObject = CustomObject()
  2. instanceOfCustomObject.someProperty = "Hello World"
  3. println(instanceOfCustomObject.someProperty)
  4. instanceOfCustomObject.someMethod()

没有必要明确导入;这就是桥接头。

在Objective-C中使用Swift类

步骤1:创建新的Swift类

将.swift文件添加到项目中,并将其命名为MySwiftObject.swift。

在MySwiftObject.swift:

  1. import Foundation
  2.  
  3. class MySwiftObject : NSObject {
  4.  
  5. var someProperty: AnyObject = "Some Initializer Val"
  6.  
  7. init() {}
  8.  
  9. func someFunction(someArg:AnyObject) -> String {
  10. var returnVal = "You sent me \(someArg)"
  11. return returnVal
  12. }
  13. }

步骤2:将Swift文件导入ObjC类

在SomeRandomClass.m:

  1. #import "<#YourProjectName#>-Swift.h"

文件: -Swift.h应该已经在您的项目中自动创建,即使您看不到它。

步骤3:使用你的类

  1. MySwiftObject * myOb = [MySwiftObject new];
  2. NSLog(@"MyOb.someProperty: %@",myOb.someProperty);
  3. myOb.someProperty = @"Hello World";
  4. NSLog(@"MyOb.someProperty: %@",myOb.someProperty);
  5. NSString * retString = [myOb someFunction:@"Arg"];
  6. NSLog(@"RetString: %@",retString);

注意:

CodeCompletion的行为不正确,我想要的。在我的系统上,使用“cmd r”运行快速构建似乎有助于Swift找到一些Objective-C代码,反之亦然。

2.如果将.swift文件添加到旧项目并收到错误:dyld:Library not loaded:@ rpath / libswift_stdlib_core.dylib,请尝试完全restarting Xcode

虽然最初可能通过使用@objc前缀在Objective-C中使用纯Swift类,但在Swift 2.0之后,这是不可能的。查看原始说明的编辑历史记录。如果此功能在未来的Swift版本中重新启用,答案将相应更新。

猜你在找的Swift相关文章