1. 创建 Stack
实例
首先,你需要创建 Stack
的具体实例。由于 Stack
是一个泛型类型,你可以创建不同类型的 Stack
实例。例如,创建一个存储整数的栈和一个存储字符串的栈。
var intStack = Stack<Int>()
var stringStack = Stack<String>()
2. 使用 add
方法添加元素
你可以使用 add
方法将元素添加到栈中。
intStack.add(1)
intStack.add(2)
intStack.add(3)
stringStack.add("Hello")
stringStack.add("World")
3. 使用 printContainer
函数打印栈中的元素
printContainer
函数可以接受任何遵循 Container
协议的类型。由于 Stack
遵循 Container
协议,你可以将 Stack
实例传递给这个函数。printContainer
会打印栈中的最后一个元素。
printContainer(container: intStack) // 打印: Optional(3)
printContainer(container: stringStack) // 打印: Optional("World")
完整代码示例
以下是完整的代码示例,演示了如何创建 Stack
实例,添加元素,并使用 printContainer
打印元素。
protocol Container {
associatedtype Item
mutating func add(_ item: Item)
func get() -> Item?
}
struct Stack<T>: Container {
typealias Item = T
private var elements: [Item] = []
mutating func add(_ item: Item) {
elements.append(item)
}
func get() -> Item? {
return elements.last
}
}
func printContainer<T: Container>(container: T) {
if let item = container.get() {
print(item)
}
}
// 创建 Stack 实例
var intStack = Stack<Int>()
var stringStack = Stack<String>()
// 添加元素
intStack.add(1)
intStack.add(2)
intStack.add(3)
stringStack.add("Hello")
stringStack.add("World")
// 打印栈中的元素
printContainer(container: intStack) // 打印: Optional(3)
printContainer(container: stringStack) // 打印: Optional("World")
解释
-
定义协议和实现:
Container
协议定义了一个类型Item
和两个方法add
和get
。Stack
结构体遵循了Container
协议,并指定了Item
为T
,使其可以处理任意类型的元素。
-
泛型与协议:
Stack
是一个泛型结构体,它实现了Container
协议,使得它可以处理任意类型的元素。printContainer
函数接受任何遵循Container
协议的类型,通过调用get()
方法获取并打印元素。
这种方法利用了 Swift 的协议和泛型功能,使得代码既灵活又通用。你可以将任何符合 Container
协议的类型传递给 printContainer
,从而实现不同类型的元素处理。