Use Extension in Swift

Extension is a great feature in Swift, which can help us to create helper/utility variables and method, and etc.

Use extension to conform protocols

It is quite common to use protocols in any project, with extension, we can make the code more organized.

extension CollectionViewController: UITableViewDelegate, UITableViewDataSource {    
	// necessary methods implementation

In the above code, we make CollectionViewController conforms the protocol UITableViewDelegate and UITableViewDataSource.

Add new properties to existing struct/classes

To be more specific, we can add computed property to the current existing classes.

Example: we can get an UIView's position information such as x, y, width and height easily.

// old way

// use extension
extension UIView {
    var x: CGFloat {
        set {
            self.frame.origin.x = newValue
        get {
            return self.frame.origin.x
    var y: CGFloat {
        set {
            self.frame.origin.y = newValue
        get {
            return self.frame.origin.y
    var width: CGFloat {
        set {
            self.frame.size.width = newValue
        get {
            return self.frame.size.width
    var height: CGFloat {
        set {
            self.frame.size.height = newValue
        get {
            return self.frame.size.height

// after the definition above, so we can use the following instead

Add new methods to existing structs/classes

This is most commonly used functions in daily development, the following is the UIColor extension which convert a Hex color into UIColor, note that we don't have the source code on UIColor.

import Foundation
import UIKit

extension UIColor {
    // Allow UIColor to use the Hex string
    // e.g. UIColor.init("445577")
    public convenience init(hex: String) {
        let scanner = Scanner(string: hex)
        scanner.scanLocation = 0
        var rgbValue: UInt64 = 0
        let r = (rgbValue & 0xff0000) >> 16
        let g = (rgbValue & 0xff00) >> 8
        let b = rgbValue & 0xff
            red: CGFloat(r) / 0xff,
            green: CGFloat(g) / 0xff,
            blue: CGFloat(b) / 0xff, alpha: 1

// To use
comments powered by Disqus