swiftでは、extenstionという拡張機能を使ってあるクラスに機能を拡張して
新しくメソッドを作ることができます。
javaの継承と似ていますが、こちらはクラスの名前を変える必要がない・メソッドの上書きが
できず新しいメソッドをどんどん作っていくのが特徴です。
元からあるクラスに加えて様々な型を対象としたメソッドを作ることができるので
アプリが肥大化して新しく機能をつくるのが辛くなった時に強みを発揮します。
この記事では、Mynameクラスをもとに名前を変更する拡張クラスを作ります。
class Myname {
var name = "asaba"
//名前出力メソッド
func printName() {
print(name)
}
}
現在のクラスはにはprintNameというメソッドがあるだけ。これをインスタンス化して
let student = Myname()
//名前を更新して出力
student.printName()
とすると”asaba”が返ってきます。
クラスの中身が確認できたので実際にextensionでクラスを拡張していきます。
extension クラス名としその中で扱う型とメソッドを書きます。
今回は名前の更新をするメソッドを追加します。
extension Myname {
func updateName(newName:String) {
name = newName //引数で受け取った新しい名前でnameを上書き
print(name) //更新した名前を出力
}
}
メソッド名をupdateNameとしインスタンス化して実行します。
let student = Myname()
student.updateName(newName:"takizawa")
コンソールを見てみるとasabaからtakizawaに切り替わっているのが確認できると思います。
元のクラスで扱っているプロパティさえあればどこまでも拡張できるのが
extensionの強みです。
全ソースコードです。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "タイトル"
let student = Myname()
//名前を更新して出力
student.printName()
student.updateName(newName:"takizawa")
}
}
class Myname {
var name = "asaba"
//名前出力メソッド
func printName() {
print(name)
}
}
extension Myname {
func updateName(newName:String) {
name = newName //引数で受け取った新しい名前でnameを上書き
print(name) //更新した名前を出力
}
}