# Swift Modules

> Learn how modules work in Swift to group files so you can reuse and encapsulate code, and how importing frameworks like SwiftUI and UIKit brings them in.

Author: Flavio Copes | Published: 2021-09-12 | Canonical: https://flaviocopes.com/swift-modules/

You write software in files.

A simple program might be stored in a single file, but complex programs are written across multiple files.

Swift provides a way to group several files into a group, called **module**.

Modules helps us do 2 things: reuse code, and encapsulate code.

You just have to write a particular functionality once, and after putting it into a module, you can import that into different places and projects.

Encapsulation means that the library can do lots of complicated things internally, but you only expose a tiny bit of it to the outside.

You start using modules by importing them.

If you've ever written

```swift
import SwiftUI
```

or 

```swift
import UIKit
```

you've already used modules. Frameworks like UIKit and SwiftUI, and many others, are modules.

After you import a module, everything that that module declares **public** will be visible inside your application code.

Modules can import other modules, and when this happens you have access to those modules automatically.

For example `SwiftUI` imports `Foundation`, so you don't have to write 

```swift
import SwiftUI
import Foundation
```

because you just need the first line.

Your application is a module, too.

Swift itself is a module, as well. And you never have to `import Swift` because it's done automatically for you.
