Swiftにはネームスペースがない!
Objective-Cに無いのでSwiftにも無いのだろう。
でも、たまに使いたくなる。
今回は思いつかなかったので、そのままフラットに進めてしまったけどextension
を使えばネームスペースっぽいことができるなと思ったのでメモしておく。
インナークラスを作る
Swiftではインナークラスが作れる。
なので、
NameSpace.swift
class NameSpace: NSObject {
class Hoge {
func test() {
print("foo")
}
}
}
と記載すれば
let hoge = NameSpace.Hoge()
hoge.test()
と、呼び出せてネームスペースっぽい。
ファイルを分けたい
当然だけど、この方法で進めてしまうと全てのクラスを同じファイルに書かなければなら無いので現実的では無い。
大本のNameSpace
クラスとは別のファイルで子クラスを定義したいならextension
を使って以下のように書く。
NameSpace.swift
extension NameSpace {
class Hoge {
func test() {
print("foo")
}
}
}
これで擬似的にネームスペースができる。
なんか、書いてみるとRubyの仕組みに似てる。
Rubyもネームスペース無いもんなぁ・・・。
以上。