【Swift】Jump to Definitionを使ってクラスやプロトコルの定義を確認する。(Swift 2.1、XCode 7.2)
前回の記事では、UITextFieldDelegateプロトコロルを適用したクラスを作成して、改行またはReturnキー(以下、Returnキー)が押されたときの処理を実装した。⇒「記事」
以下は前回実装したコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/* ** デリゲートメソッドを利用してキーボードをしまう */ import UIKit class ViewController: UIViewController,UITextFieldDelegate { //ラベル @IBOutlet weak var testLabel: UILabel! //テキストフィールド @IBOutlet weak var testTextField: UITextField! //イベントを受けるメソッド @IBAction func catchEvent(sender: UITextField) { testLabel.text = sender.text } //初期化メソッド(最初からある) override func viewDidLoad() { super.viewDidLoad() //デリゲート先を指定 self.testTextField.delegate = self } //デリゲートメソッド func textFieldShouldReturn(textField:UITextField) -> Bool { //キーボードをしまう self.view.endEditing(true) return false } } |
textFieldShouldReturnメソッドは、UITextFieldDelegateプロトコロルに定義されているメソッドで、Returnキーが押されたイベントを検知して自動で呼び出される。
「このプロトコルに定義されている他のメソッドにはどんなものがあるか?」、「いま使っているSwiftの標準クラスにはどんなプロパティやメソッドが定義されているのか?」などを知りたくなるときがある。
そんなときに簡単に定義を確認する方法がある。
クラスやプロパティの定義の調べかた
例えば、UITextFieldDelegateプロトコルに定義されている他のメソッドを調べたい場合、ソースコードのUITextFieldDelegateを右クリック。表示されたメニューの中から「Jump to Definition」を選択する。
すると、UITextFieldDelegateプロトコルの定義まで飛ぶことができので、ここに記述されている定義やコメントを参考にしながら自分のコードを作る。
このように標準クラスやプロトコルの定義を確認したくなったら、Jump to Definitionを活用しよう。ちなみに、アシスタントエディタを開いて左に作成中のソース、右に定義を表示すれば横にらみしながら作業ができるので効率的だ。
@available属性とは
先ほどの定義の中で見慣れないものがあるので説明しておく。
まず@availableとは、@availableの真下にあるプロパティやメソッドを利用できるOSとバージョンを指定したものである。以下の例では「iOSのバージョン2以降、または、他のOSが利用可能」であることを表している。
1 2 3 4 |
@available(iOS 2.0, *) optional public func textFieldShouldBeginEditing(textField: UITextField) -> Bool // return NO to disallow editing. |
では、以下の@availabelを翻訳すると何になるか。その通り。「iOS7.0以降、OSX9.0以降、tvOS8.0以降、watchOS1.0以降で利用可能」となる。
1 2 |
@available(iOS 7.0, OSX 9.0, tvOS 8.0, watchOS 1.0) |
optionalメソッドとは
メソッド名の前に記載されているoptionalとは、実装しなくてもエラーにならないメソッドである。
通常、プロトコルを適用したクラスは、プロトコルに定義されているプロパティとメソッドは必ず実装しなければならないというイメージがあるが、optionalがついているメソッドは不要ならば省略することができる。
ちなみに、UITextFieldDelegateプロトコルに定義されているメソッドは全てoptionalがついているので、通知して欲しいイベントのメソッドのみを実装すればいい。