The answer to your question heading, unfortunately, is no: there is no way for the jury-rig type CollectionType to be a stand-alone type that can be used as a variable or return type.
, SequenceType CollectionType, , , typealiases , , . , . , . ( , , - " ".)
,
func countItems(collection: CollectionType) -> Int { ... }
func countItems<T: CollectionType>(collection: T) -> Int { ... }
, (T), CollectionType.
, , , , , , . , CollectionType:
struct ShieldedCollection<UCT: CollectionType> : CollectionType
{
private var underlying: UCT
func generate() -> UCT.Generator { return underlying.generate() }
subscript(index: UCT.Index) -> UCT.Generator.Element { return underlying[index] }
var startIndex: UCT.Index { return underlying.startIndex }
var endIndex: UCT.Index { return underlying.endIndex }
}
var foo = [1, 2, 3]
var shieldedFoo = ShieldedCollection(underlying: foo)
( UCT = " ".)
ShieldedCollection - , CollectionType, , .
, , , , API. Foo
ShieldedCollection<Array<Int>>
, - API, . , , , ShieldedCollection , , - Items() CollectionType, .
, , UCT ShieldedCollection:
struct ShieldedCollection<T> : CollectionType
{
typealias UCT = [T]
private var underlying: UCT
func generate() -> UCT.Generator { return underlying.generate() }
subscript(index: UCT.Index) -> UCT.Generator.Element { return underlying[index] }
var startIndex: UCT.Index { return underlying.startIndex }
var endIndex: UCT.Index { return underlying.endIndex }
}
var foo = [1, 2, 3]
var shieldedFoo = ShieldedCollection(underlying: foo)
, - ShieldedCollection CollectionTypes, . (, typealias UCT.)