Default Implementation swfitリファレンス


swiftのリファレンスで、プロトコルのメソッド等の説明で、Default Implementation
と記述されている箇所がありますが、これは何を意味しているのですか。

Protocol Extensionsが使われているという意味でしょうか？

要件が満たされたとき、protocol Extensionsで記述したものが採用されるとは、  
どういった記述でできるのでしょうか？




例えば、[`CollectionType`のソースコード](https://github.com/apple/swift/blob/master/stdlib/public/core/Collection.swift)を見てみると、ドキュメントのDefault
Implementationsのところに記述されている`map`は、[`CollectionType`の`extension`として実装](https://github.com/apple/swift/blob/master/stdlib/public/core/Collection.swift#L309)されています。

特定の要件が満たされた時にだけProtocol
Extensionを有効にするには、`extension`定義時に`where`で要件を指定します。例えば、[`generate`のデフォルトの実装](https://github.com/apple/swift/blob/master/stdlib/public/core/Collection.swift#L206)は、以下の様な形で定義されています。

[code]

    extension CollectionType where Generator == IndexingGenerator<Self> {
      public func generate() -> IndexingGenerator<Self> {
        return IndexingGenerator(self)
      }
    }
    
[/code]




例えば、[`CollectionType`のソースコード](https://github.com/apple/swift/blob/master/stdlib/public/core/Collection.swift)を見てみると、ドキュメントのDefault
Implementationsのところに記述されている`map`は、[`CollectionType`の`extension`として実装](https://github.com/apple/swift/blob/master/stdlib/public/core/Collection.swift#L309)されています。

特定の要件が満たされた時にだけProtocol
Extensionを有効にするには、`extension`定義時に`where`で要件を指定します。例えば、[`generate`のデフォルトの実装](https://github.com/apple/swift/blob/master/stdlib/public/core/Collection.swift#L206)は、以下の様な形で定義されています。

[code]

    extension CollectionType where Generator == IndexingGenerator<Self> {
      public func generate() -> IndexingGenerator<Self> {
        return IndexingGenerator(self)
      }
    }
    
[/code]

