//
表示中
Computer - コンピューター

SwiftからKonashi SDKのクラスを使う


Bluetooth Low EnergyモジュールKonashiiOS用の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から使用できます。

BridgingHeaderInXCode

{Product Module Name}の部分はターゲットのビルドセッティングからProduct Module Nameというプロパティを探します。スクリーンショットの青い線で囲った部分がそれです。

Product Module Name

同じくビルドセッティングの下の方にSwift Compiler – Code Generationという部分があります。ここのObjective-C Bridging Headerというプロパティがあるので、ここに上記のブリッジングヘッダーの名前を設定します。

BridgingHeader

 

この状態でビルドを実行したところブリッジングヘッダのパスがおかしい(ファイルが見つからない)というエラーでビルドに失敗しました。もし同じ失敗をしたら、そのビルドエラーメッセージをよく見て、ビルドツールが想定しているパスにブリッジングヘッダーが置かれているかを確認してみてください。ファイルをビルドツールが想定するパスに移動すればビルドエラーはなくなると思います。

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に関しては見切り発車というか、やりながら調べれば良いと思っていますが、本来なら言語リファレンスを一気に読んでから取り組んだ方が良いのかもしれません。慣れるまでは少ししんどいですが、のんびり取り組みたいと思います。

kazz12211 について

Working as a OO programmer and enjoying music, bicycle and photography.

ディスカッション

コメントはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

手仕事日記

評価

ブログ統計

  • 525,901 ヒット

カテゴリー

アーカイブ

カレンダー

2016年3月
« 2月   4月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  
%d人のブロガーが「いいね」をつけました。