##プロトコルのイニシャライザとクラスのイニシャライザ##
前回に続いて、クラスMySuper
にクラス自身のイニシャライザを追加してみた。
protocol
で宣言したイニシャライザinit(srt)
は、修飾子required
が必要となる。
MySuper.swift
import Foundation
class MySuper:MyProtocol{
//プロトコルに宣言したinit(str)
required init(str: String) {
NSLog("MySuperクラスのrequired init(%@)", str)
}
//デフォルトのイニシャライザinit()
init()
{
NSLog("MySuperクラスのデフォルトinit()")
}
func protocolFunction01() {
NSLog("MySuperクラスのFunction01")
}
func protocolFunction02() {
NSLog("MySuperクラスのFunction02")
}
}
そこで、さらに子クラスMyParent
を作ってみる。
余談だが、下記のエラーが起きる。
Overriding declaration requires an 'override' keyword
どうやらoverride
修飾子が必要なようである。
そこで、適切にoverride
修飾子を付加してあげる。
MyParent.swift
import Foundation
class MyParent: MySuper{
required init(str: String)
{
super.init(str: str)
NSLog("MyParentクラスのrequired init(%@)", str)
}
override init()
{
super.init()
NSLog("MyParentクラスのoverride init()")
}
}
##クラスのインスタンス化##
ここでいよいよViewController
で、MyParent
クラスをインスタンス化してみる。
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var myParent:MyParent = MyParent()
}
}
コンソール結果は思った通りの結果に。
ちなみに、String
をパラメータとするinit(str)
で初期化する場合。
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var myParent:MyParent = MyParent(str: "ほげほげ")
}
}
さらに、さらに子クラスMyChild
を作ってみる。
MyChild.swift
import Foundation
class MyChild: MyParent{
required init(str: String)
{
super.init(str: str)
NSLog("MyChildクラスのrequired init(%@)", str)
}
override init()
{
super.init()
NSLog("MyChildクラスのoverride init()")
}
}
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//var myParent:MyParent = MyParent(str: "ほげほげ")
var myChild:MyChild = MyChild(str: "ふがふが")
}
}
コンソール結果は、3段ふがふが。
ここまでは予想通り。w