iOSプログラミング with Swift 2


2016.05.27: created by

SwiftでObjective-Cのクラスを利用する

  1. Xcode を起動して "Create a new Xcode project" で "Single View Application" として新しいプロジェクトを開きます。 ここではプロジェクト名を SwiftObjC としています。



  2. Main.storyboard上の ViewController に、右下の "Object library" から "Button" をドラッグして配置します。



  3. Main.storyboard上の ViewController に、右下の "Object library" から "Label" をドラッグして配置します。すこし横幅に広げておきます。



  4. Main.storyboardが表示されている状態で、 ウィンドウの右上の "Show the Assistant Editor" ボタン をクリックして、右側のウィンドウに ViewController.swift が表示されている 状態にします。



  5. Main.storyboard上の Labelw を1回クリックして選択してから、 右マウスボタン(またはControllキー+左マウスボタン)でドラッグして、 右側の画面のViewController.swift の
    class ViewController: UIViewController {
    
    の下の行まで持っていきます。 ConnectionはOutlet, Name は myLabel として Connect をクリックしましょう。



  6. ViewConrolle.swift に
    @IBOutlet weak var myLabel: UILabel!
    
    という行が追加されました。その行の左には丸が表示されていますが、これをクリックすると 何のオブジェクトと結び付いているかわかります。



  7. Main.storyboard上の Button を1回クリックして選択してから、 右マウスボタン(またはControllキー+左マウスボタン)でドラッグして、 右側の画面のViewController.swift の先ほど追加した
    @IBOutlet weak var myLabel: UILabel!
    
    の下の行まで持っていきます。 ConnectionはAction, Name は tapButton として Connect をクリックしましょう。



  8. ViewController.swift に
    @IBAction func tabButton(sender: AnyObject) {
    }
    
    という2行が追加されます。



  9. ウィンドウ左の Project Navigator のプロジェクト名の上で、マウスを左クリックします。 メニューの中から "New File..." を選択します。



  10. iOS -> Cocoa Touch Class -> Next を選ぶとクラス名の入力になります。ここではクラス名は WithObjC、Subclass ofに UIView, LauguageにObjective-C を選択しました。 もしも表示に関係しないならばSubclass ofはNSObjectでもよいと思われます。







    このあと「SwiftとObjective-Cをブリッジ(橋渡し)するHeaderを作るか」と確認を求められるので "Create Bridging Header" を選択します。 ブリッジングヘッダーファイルの名前は「プロジェクト名-Bridging-Header.h」となります。




    WithObjC.h, WithObjC.m, SwiftObjC-Bridging-Header.h が新たに生成されました。




    SwiftとObjective-Cをビルドする http://nw.tsuda.ac.jp/wiki/index.php?Swift/withObjectiveC にざっと目を通しておくことをお勧めします。

  11. "プロジェクト名-Bridging-Header.h" (この例では "SwiftObjC-Bridging-Header.h") に Objective-C のヘッダファイルを imporotする記述を追加します。この記述によって、このプロジェクト内の Swift プログラムから Objective-C のクラスが参照できるようになります。
  12. SwiftObjC-Bridging-Header.hに追加するコード(赤字部分)
    #import "WithObjC.h"
    
  13. WithObjCクラスにプロパティやメソッドの定義を追加します。 ここでは2個のメソッドを追加しています。



  14. WithObjC.hに追加するコード(赤字部分)
    #import 
    
    @interface WithObjC : UIView
    
    
    - (int) inc: (int) x;
    - (int) add: (int) x with: (int) y;
    
    @end
    
    WithObjC.mに追加するコード(赤字部分)
    #import "WithObjC.h"
    
    @implementation WithObjC
    
    - (int) inc: (int) x {
        return x + 1;
    }
    
    - (int) add: (int) x with: (int) y {
        int z = x + y;
        return z;
    }
    
    @end
    
  15. ViewController.swift を変更します。
  16. ViewController.swiftに追加するコード(赤字部分)
    import UIKit
    
    class ViewController: UIViewController {
        var objc: WithObjC!
        var seed: Int32 = 0;
    
        @IBOutlet weak var myLabel: UILabel!
    
        @IBAction func tapButton(sender: AnyObject) {
            seed += 1;
            let a: Int32 = objc.inc(seed);
            let b: Int32 = objc.add(seed, with: Int32(10));
            myLabel.text = String(format:"%d %d",a,b);
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            objc = WithObjC()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
         }
    
    }
    
    
  17. アプリが起動した状態で画面上の "Button" を押すと Label に "2 12" と表示されます。 以降、ボタンをクリックする度に "3 13", "4 14" と表示される數が増えていきます。 この加算計算の部分をObjective-Cのインスタンスメソッドでで行っています。

  18.      

  19. サンプルのプロジェクトはこちら。(Xcode 7.3.1版)


http://karel.tsuda.ac.jp