# 1. Introduction

A Stack is a linear data structure that follows the Last In First Out (LIFO) principle, which means the last element added to the stack is the first element to be removed. Common operations associated with Stack are push (to add an item) and pop (to remove the top item).

# 2. Implementation Steps

1. Define a Stack class or struct.

2. Inside the Stack, maintain a private array to hold the elements.

3. Provide a method push to add an element to the top of the stack.

4. Provide a method pop to remove and return the top element. If the stack is empty, return nil or an optional value.

5. Provide a method peek to see the top element without removing it.

6. Provide a computed property isEmpty to check if the stack is empty.

# 3. Implementation in Swift

``````struct Stack<T> {
private var items: [T] = []
// Push an item onto the stack
mutating func push(_ item: T) {
items.append(item)
}
// Pop an item off the stack
mutating func pop() -> T? {
return items.popLast()
}
// Peek at the top item without removing it
func peek() -> T? {
return items.last
}
// Check if the stack is empty
var isEmpty: Bool {
return items.isEmpty
}
}
// Example Usage
var intStack = Stack<Int>()
intStack.push(5)
intStack.push(10)
intStack.push(15)
print("After pushes: \(intStack)")
print("Peek: \(intStack.peek() ?? -1)")
print("Pop: \(intStack.pop() ?? -1)")
print("After pop: \(intStack)")
``````

### Output:

```After pushes: Stack<Int>(items: [5, 10, 15])
Peek: 15
Pop: 15
After pop: Stack<Int>(items: [5, 10])
```

### Explanation:

1. The Stack is implemented as a generic struct, which means it can hold elements of any type.

2. Inside the Stack, a private array named items is maintained to hold the elements of the stack.

3. The push method appends an item to the end of the items array.

4. The pop method removes and returns the last item from the items array, or returns nil if the stack is empty.

5. The peek method returns the last item from the items array without removing it.

6. The isEmpty computed property checks whether the items array is empty, indicating if the stack is empty.