Wednesday, June 7, 2023
HomeiOS DevelopmentSwift static manufacturing facility design sample

Swift static manufacturing facility design sample


Actual world static manufacturing facility sample examples

Named constructors

The primary benefit of the static manufacturing facility sample is that each static manufacturing facility methodology can have a reputation. Apple makes use of this sample of their UIColor class implementation to create named colours like .crimson, .yellow, and so forth. Please notice that the implementation in Swift will not be actually a technique, however a static property, which returns the precise occasion.

public extension TimeInterval {
    public static var second: TimeInterval { return 1 }
    public static var minute: TimeInterval { return 60 }
    public static var hour: TimeInterval { return 3_600 }
    public static var day: TimeInterval { return 86_400 }
    public static var week: TimeInterval { return 604_800 }
}

If it is so onerous to memorize what number of seconds is a day or every week why do not we create a named initializer for it. See? TimeInterval.week is a lot better than 604_800. 😅

Cached objects

The subsequent benefit of the static manufacturing facility sample is that it may possibly assist caching for the sake of higher reminiscence utilization. This fashion you may restrict the variety of objects created if you’re initializing it by means of the static constructor (aka. static manufacturing facility methodology). 🏭

class Service {

    var identify: String

    

    personal static var cache: [String:Service] = [:]

    personal static func cached(identify: String) -> Service {
        if Service.cache[name] == nil {
            Service.cache[name] = Service(named: identify)
        }
        return Service.cache[name]!
    }

    

    static var native: Service {
        return Service.cached(identify: "native")
    }

    static var distant: Service {
        return Service.cached(identify: "distant")
    }

    

    init(named identify: String) {
        self.identify = identify
    }
}

Native initialization scope

One other benefit of static manufacturing facility strategies which you can restrict the initialization of a category to a personal scope degree. In different phrases object creation will solely be accessible by means of the static manufacturing facility methodology. You simply must make the init methodology personal.

public last class Service {

    var identify: String

    personal init(identify: String) {
        self.identify = identify
    }

    public static var native: Service {
        return Service(identify: "native")
    }

    public static var distant: Service {
        return Service(identify: "distant")
    }
}

Notice which you can limit subclassing with the ultimate & static key phrase. If you wish to enable subclassing you need to take away last and use the class key phrase as an alternative of the static for the properties, this manner subclasses can override manufacturing facility strategies. 🤔

Statically return something

Static manufacturing facility may also return subtypes of a given object, however why do not we take this even one step additional? It’s also possible to return any form of kind from a static methodology, I do know this looks as if a cheat, as a result of I am not creating an occasion of UIColor right here, however I consider that it is value to say this methodology right here, as a result of it is carefully associated to static factories. This method may be actually helpful typically. 😛

extension UIColor {

    personal static func picture(with coloration: UIColor) -> UIImage {
        let rect = CGRect(x: 0, y: 0, width: 1, peak: 1)
        UIGraphicsBeginImageContext(rect.measurement)
        let context = UIGraphicsGetCurrentContext()!
        context.setFillColor(coloration.cgColor)
        context.fill(rect)
        let img = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return img!
    }

    static var redImage: UIImage {
        return UIColor.picture(with: .crimson)
    }
}



Supply hyperlink

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -
Google search engine

Most Popular

Recent Comments