Swift 標準ライブラリの機能には Swift 名前空間でアクセスできる

Swift プログラミング

Swift で標準ライブラリにある関数と同じ名前の関数を新たに定義したときに、標準ライブラリにある方の関数を呼びたいときには Swift 名前空間を指定することで実現できます。


Swift で型を自作していたりすると、標準ライブラリにある関数と同じ名前のメソッドを定義したくなることがあります。

そんなときでも Swift では自作モジュールと標準ライブラリとは名前空間で明確に区別されるので、同じ名前であっても問題なく定義できます。使うときも、基本的には自作のものが優先、自作のものが適切でなければ標準ライブラリの方が使われたりして、普段は問題なく扱えます。


ただ、次のような場面で、衝突してビルドエラーになってしまう場合がありました。

struct MyClass {

	var items:[Int]
	
	init(_ items:[Int]) {
		
		self.items = items
	}
	
	var count:Int {
	
		return count(self.items)
	}
}

このとき、最後の countプロパティ の実装内で Swift 標準ライブラリの count関数 を使おうとしたところで、次のエラーが発生しました。

Cannot invoke 'count' with an argument list of type '([Int])'

Swift 名前空間

Swift 標準ライブラリの機能は Swift 名前空間に実装されているので、このようなときは名前空間を明示することでエラーを解消できます。

struct MyClass {

	var count:Int {
	
		return Swift.count(self.items)
	}

Swift 標準ライブラリのものではなく自作のものを明示したい場合は、それが所属する名前空間を指定します。名前空間は、既定ではビルドするターゲット名に、つまり Xcode のプロジェクト名になっているので、プロジェクト名が MyProject であれば MyProject.count のように指定することになります。