Bluetooth Low EnergyモジュールKonashiのiOS用のSDKはObjective-Cのクラス群として提供されています。個人的にはObjective-Cに親しんでいるのでアプリケーションもObjective-Cで書いてもいいのですが、Swiftの利用者が増えているような気がするので乗り遅れないため(笑)にしばらくSwiftを使ってみようと思います。
Swiftに関する説明はApple者の発者向けページのThe Swift Programming Language (Swift 2.2)にあります。言語仕様についてはここを読めばわかると思います。
SwiftからObjective-Cのクラスを利用するためには Using Swift with Cocoa and Objective-C (Swift 2.2)を読めばだいたいわかると思います。
これは異種言語間のブリッジ技術というものです。以前、WebObjectでObjective-CのJavaブリッジなんていうのを少し触ったことがありますが、普段はあまりブリッジ技術というのを使うことはありません。
では、KonashiのチュートリアルのGetting Startedプロジェクトを題材にしてやってみます。iOSのアプリケーションを作った経験のある人ならば、あまり詳しい説明はいらないと思いますので、核心部分以外のところの説明は省略しますことをお断りしておきます。
XCodeで新規iOSアプリケーションプロジェクトをSwiftプロジェクトとして作ります。Konashi SDKからKonashiフォルダーをプロジェクトに追加します。ここまではKonashiのチュートリアルに書かれている通りにやります。
次に {Product Module Name}-Bridging-Header.h というファイルをプロジェクト内に作成します。これがブリッジングヘッダーです。このヘッダの中で使用したいObjective-CのクラスのインポートをするとSwiftから使用できます。
{Product Module Name}の部分はターゲットのビルドセッティングからProduct Module Nameというプロパティを探します。スクリーンショットの青い線で囲った部分がそれです。
同じくビルドセッティングの下の方にSwift Compiler – Code Generationという部分があります。ここのObjective-C Bridging Headerというプロパティがあるので、ここに上記のブリッジングヘッダーの名前を設定します。
この状態でビルドを実行したところブリッジングヘッダのパスがおかしい(ファイルが見つからない)というエラーでビルドに失敗しました。もし同じ失敗をしたら、そのビルドエラーメッセージをよく見て、ビルドツールが想定しているパスにブリッジングヘッダーが置かれているかを確認してみてください。ファイルをビルドツールが想定するパスに移動すればビルドエラーはなくなると思います。
Konashiを動かすためにソースコードに手を入れていきます。
KonashiのチュートリアルはObjective-Cでコードが書かれています。
ViewController.h
#import "ViewController.h" #import "Konashi.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // Register event handler [[Konashi shared] setReadyHandler:^{ // Set pin mode to output [Konashi pinMode:KonashiLED2 mode:KonashiPinModeOutput]; // Make LED2 glow [Konashi digitalWrite:KonashiLED2 value:KonashiLevelHigh]; }]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)find:(id)sender { [Konashi find]; } @end
これをSwift版ではこう書き換えます。
ViewController.swift
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() Konashi.shared().readyHandler = {() -> Void in Konashi.pinMode(KonashiDigitalIOPin.LED2, mode: KonashiPinMode.Output) Konashi.digitalWrite(KonashiDigitalIOPin.LED2, value: KonashiLevel.High) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func find(sender: UIButton) { Konashi.find() } }
Swiftに関しては見切り発車というか、やりながら調べれば良いと思っていますが、本来なら言語リファレンスを一気に読んでから取り組んだ方が良いのかもしれません。慣れるまでは少ししんどいですが、のんびり取り組みたいと思います。
工房便り〜TSUBAKI GUITARS & LEATHER でリブログしてコメントを追加:
Konashiに関する過去の投稿です。
いいねいいね