---
title: "Easier interaction between UIImage and assets"
slug: easier-interaction-between-uiimage-and-assets
section: tech
date: 2016-06-11T02:35:00.000Z
canonical: https://roland.leth.ro/blog/tech/easier-interaction-between-uiimage-and-assets
---

We all hate explicitly typed strings, especially for creating `UIImage`s, but we can surely improve on that. Let's start with an `enum`, that has a `var`, to transform its raw value into an `UIImage`:

```swift
enum Asset: String {
  case back = "leftArrow"
  case logo
  case email
  case briefcase
	
  // Theoretically, a bang wouldn't be that bad here, 
  // as we should be 100% sure of what goes in this enum
  var image: UIImage? {
    return UIImage(named: rawValue)
  }
}
```

And why not improve `UIImageView` too, while we're at it?

```swift
extension UIImageView {
  convenience init(asset: Asset) {
    self.init(image: asset.image)
  }
}
```

Now, by having autocomplete, our calls are easier, and safer:

```swift
let backImage = Asset.back.image
let emailImage = Asset.logo.image

let logoImageView = UIImageView(asset: .logo)
let briefcaseImageView = UIImageView(asset: .briefcase)
```