Access Control for Type Aliases
The user can define type aliases to treat distinct access control types. Same access level
or different access levels can be defined by the user. When type alias is 'private' its
associated members can be declared as 'private, internal of public type'. When type alias
is public the members cannot be alias as an 'internal' or 'private' name
Any type aliases you define are treated as distinct types for the purposes of access control.
A type alias can have an access level less than or equal to the access level of the type it
aliases. For example, a private type alias can alias a private, internal, or public type, but
a public type alias cannot alias an internal or private type.
public protocol Container {
typealias ItemType
mutating func append(item: ItemType)
var count: Int { get }
subscript(i: Int) - > ItemType { get }
}
struct Stack<T>: Container {
// original Stack<T> implementation
var items = [T]()
mutating func push(item: T) {
items.append(item)
}
mutating func pop() - > T {
return items.removeLast()
}
// conformance to the Container protocol
mutating func append(item: T) {
self.push(item)
}
var count: Int {
return items.count
}
subscript(i: Int) - > T {