
【Swift】【初心者用】extensionとは
はいどうも!
フリーランスエンジニアの南だいすけです!
今日はSwiftのextensionについて書きたいと思います。
extensionとは
extensionはよく
既存クラスにプロパティやメソッドを拡張すること
なんて言われ方をします!
が。。
初心者の方がそれをいうと何がどう拡張されるの。。?
という疑問が浮かぶと思います。。
なので今回は入りとして、
簡略的にわかりやすさ重視で説明したいと思います。
あくまで入りということを覚えていてください。
extensionの書き方
はじめにextensionの書き方の例を載せておきます。
機能を増やしたいViewController名: extensionしたい機能 {
// 必要な情報記入!
}
という感じです。
今回はtableViewを題材に書いてみましょう。
よくtableViewを作成すると以下のようなコードを書くと思います。
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "えくすてんしょん"
return cell
}
}
ここでいう
ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
がextensionで書く部分です!
これをextensionで書いてみます。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "えくすてんしょん"
return cell
}
}
tableViewのコードを日本語にすると
ViewControllerにUITableViewDelegateと
UITableViewDataSourceの機能を追加してね。
必要な情報はextensionの{}内の関数だよ。
と言った感じです。
extensionのメリット
こうすることでextension以下のものがtableViewに必要な情報
(厳密にはdelegate = selfとdataSource = selfも含む)
なのでコードもすっきりしますし、
見やすいというメリットがあります。
とりあえずはじめのうちは、一番はじめの
ViewController: UIViewControllerの後につなげるやつを
extension: ViewController: 〜 みたいな感じで別に書くんだなー
程度に思っておきましょう!
どうだったでしょうか?
今回はSwiftのextensionについて書かせていただきました!
さいごに
プログラミングって難しいですよね。。
僕も文系大学を出て、全くの未経験からスタートしたので
気持ちは痛いほどよくわかります。。!
少しずつ勉強していけば知識が蓄積され、
いつかはそれが線として繋がる日が絶対きます!!
一緒にがんばっていきましょう!
この記事で少しでも初心者の方が、
「お!そういうことか!」とか「ちょっとわかったぞ!!」
っとなっていただけたら幸いです。
最後まで見ていただきありがとうございました!
ではまた次の記事でお会いしましょう!