SwiftからObjective-Cコードを呼び出す方法



5 Answers

Sweet with CocoaとObjective-Cのアップルのガイドを参照してください。 このガイドでは、SwiftのObjective-CとCコードの使い方について説明しています。既存のプロジェクトでObjective-C / CとSwiftの部分をどのように組み合わせたり、組み合わせたりするかについての推奨事項があります。

コンパイラは、C関数とObjective-Cメソッドを呼び出すためのSwift構文を自動的に生成します。 ドキュメントに見られるように、このObjective-C:

UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

このスウィフトコードに変わります:

let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped)

Xcodeはこの翻訳を即座に実行します。Swiftファイルを編集中にObjective-Cクラス名を入力するとすぐに開くことができ、クラスヘッダのSwift-ifiedバージョンになります。 また、SwiftファイルのAPIシンボルをcmdキーを押しながらクリックすることでも取得できます。また、 iOS 8およびOS X v10.10(Yosemite)開発者ライブラリのすべてのAPIリファレンスドキュメントは、Objective-CとSwiftの両方に表示されていますフォーム( UIView )。

Question

Appleの新しいSwift言語では、Objective-Cコードはどのように呼び出されますか?

Appleは1つのアプリケーションに共存できると述べていますが、これはObjective-Cで作成した古いクラスを技術的に再利用できることを意味し、Swiftに新しいクラスを作成していますか?

推理

Objective-Cはプラットフォームに依存しない言語ですが、Swiftはプラットフォームに依存します。 したがって、プラットフォームに依存しないコード(ビジネスロジックライブラリ)をSwiftに書くことは賢明ではありません。 しかし、それにプラットフォーム依存のコードを書くこと(例えば、関連するインタフェース)は、まったく問題ありません。 それは良いアイデアだとは言いませんが、間違いなく興味です。




モジュールとしてアクセス可能なObjective-Cフレームワーク(またはCライブラリ)は、Swiftに直接インポートできます。 これには、Foundation、UIKit、SpriteKitなどのObjective-Cシステムフレームワークと、システムに付属の一般的なCライブラリが含まれます。 たとえば、Foundationをインポートするには、作業中のSwiftファイルの先頭に次のimport文を追加します。

import Foundation

このインポートにより、NSDate、NSURL、NSMutableData、およびそれらのすべてのメソッド、プロパティ、およびカテゴリを含むすべてのFoundation APIがSwiftで直接利用可能になります。

私はこれをAppleのドキュメントから取りました。




ドキュメントからの引用:

モジュールとしてアクセス可能なObjective-Cフレームワーク(またはCライブラリ)は、Swiftに直接インポートできます。 これには、Foundation、UIKit、SpriteKitなどのObjective-Cシステムフレームワークと、システムに付属の一般的なCライブラリが含まれます。 たとえば、Foundationをインポートするには、作業中のSwiftファイルの先頭に次のimport文を追加します。

import Foundation

このインポートにより、NSDate、NSURL、NSMutableData、およびそれらのすべてのメソッド、プロパティ、およびカテゴリを含むすべてのFoundation APIがSwiftで直接利用可能になります。




新規ファイルメニューをクリックし、ファイル選択言語Objectiveを選択します。 この時点で、クラス名を定義するために使用される "Objective-C Bridging Header"ファイルが自動的に生成されます。

"Swiftコンパイラ - コード生成"の "Objective-C Bridging Header"




Objective-CライブラリをSwiftに追加しようとする人のためのメモ: Build Settings - > Linking - > Other Linker Flagsに -ObjCを追加する必要があります




素晴らしいスウィフト&ココアポッドを読むことができます。 基本的には、ブリッジヘッダーファイルを作成し、すべてのObjective-Cヘッダーをそこに置く必要があります。 そして、ビルドの設定から参照する必要があります。 その後、Objective-Cコードを使用することができます。

let manager = AFHTTPRequestOperationManager()
manager.GET(
  "http://example.com/resources.json",
  parameters: nil,
  success: { (operation: AFHTTPRequestOperation!,
              responseObject: AnyObject!) in
      println("JSON: " + responseObject.description)
  },
  failure: { (operation: AFHTTPRequestOperation!,
              error: NSError!) in
      println("Error: " + error.localizedDescription)
  })

また、Appleの文書でSwift with CocoaとObjective-Cも参照してください。




Related