Simplify Your Code with isEmptyOrNil

A Concise Approach to Handling Empty or Nil Optionals

Vikram Kumar
3 min readNov 30, 2023

Swift Optional extensions offer a powerful way to enhance the functionality of Optionals, and by leveraging the type constraints provided by Swift, you can tailor your extensions to specific types. In this article, we’ll explore how to extend Optionals for both String and Collection types, introducing a convenient property named isEmptyOrNil. This extension simplifies the common task of checking whether an Optional contains an empty value or is nil.

Photo by Vasily Koloda on Unsplash

Understanding the isEmptyOrNil Extension

The isEmptyOrNil property is designed to work with both String and any type conforming to the Collection protocol. It encapsulates the logic of checking whether the Optional is either nil or contains an empty value. This extension promotes code conciseness and readability, reducing the need for verbose checks in your code.

Extending Optionals for String

Let’s start by extending Optionals that wrap String values:

extension Optional where Wrapped == String {

var isEmptyOrNil: Bool {
return self?.isEmpty ?? true
}

}

In this extension, the isEmptyOrNil property returns true if the Optional is nil or if the wrapped String is empty. If the Optional contains a non-empty String, it returns false.

Extending Optionals for Collection

Now, let’s extend Optionals for any type conforming to the Collection protocol:

extension Optional where Wrapped: Collection {

var isEmptyOrNil: Bool {
return self?.isEmpty ?? true
}

}

This extension covers a broader range of types, including arrays, sets, and dictionaries, by relying on the Collection protocol. The isEmptyOrNil property behaves similarly, returning true if the Optional is nil or if the wrapped collection is empty.

Practical Examples

Let’s explore practical examples to see how the isEmptyOrNil property simplifies code when dealing with Optionals:

Example with String

var optionalString: String? = "Hello, Swift!"

if optionalString.isEmptyOrNil {
print("The optional string is either nil or empty.")
} else {
print("The optional string has a value: \(optionalString!)")
}

In this example, the isEmptyOrNil property helps streamline the conditional check, making the code more concise and expressive.

Example with Collection

var optionalArray: [Int]? = [1, 2, 3]

if optionalArray.isEmptyOrNil {
print("The optional array is either nil or empty.")
} else {
print("The optional array has values: \(optionalArray!)")
}

Similarly, when dealing with an Optional containing a collection, the isEmptyOrNil property simplifies the check for emptiness or nil.

Conclusion

By extending Swift Optionals for specific types, such as String and Collection, and introducing the isEmptyOrNil property, you enhance the readability and conciseness of your code. This approach encapsulates common logic, making your codebase more maintainable and reducing the chances of errors in optional handling.

Experiment with similar extensions in your projects to create a codebase that is not only robust but also easy to understand and maintain. The power of Swift extensions allows you to tailor your code to your specific needs, providing a more enjoyable and efficient development experience.

Thank you for reading until the end. Before you go:

--

--

Vikram Kumar
Vikram Kumar

Written by Vikram Kumar

I am Vikram, a Senior iOS Developer at Matellio Inc. focused on writing clean and efficient code. Complex problem-solver with an analytical and driven mindset.

No responses yet