I’ve used extension methods for a while in F# as a neat way of adding utility methods to system types. For example, suppose you have a set and want to add some elements to it? You might write something like this:
let collection = ... // initial set defined elsewhere let collection = // add extra elements into collection [| 1; 2; 3 |] |> Array.fold (fun (acc : Set<'T>) item -> acc.Add item) collection
You might find yourself writing this snippet frequently and for different container types. Instead of defining the operation every time, it’s better to write an extension method:
namespace MusingStudio.Extensions module Set = let AddMulti (items : seq<'T>) (collection : Set<'T>) = items |> Seq.fold (fun (acc : Set<'T>) item -> acc.Add item) collection
Then, by bringing the extensions into scope, we can call AddMulti as if it were part of the system Set interface:
open MusingStudio.Extensions [<EntryPoint>] let main argv = let initial = [| 1; 2; 3 |] |> Set.ofArray let updated = initial |> Set.AddMulti [| 4; 5; 6 |] printfn "%A" updated 0 // return an integer exit code
I was looking for a way to get the current time/date in Swift, and found some code on Stack Overflow that uses Extension Methods to do it. I’ve added a couple more methods to get the seconds and day-of-month:
import Foundation // From: http://stackoverflow.com/questions/24070450/how-to-get-the-current-time-and-hour-as-datetime extension NSDate { func hours() -> Int { //Get Hours let calendar = NSCalendar.currentCalendar() let components = calendar.components(.Hour, fromDate: self) let hours = components.hour //Return Hour return hours } func minutes() -> Int { //Get Minutes let calendar = NSCalendar.currentCalendar() let components = calendar.components(.Minute, fromDate: self) let minutes = components.minute //Return Minute return minutes } func seconds() -> Int { // Get Seconds let calendar = NSCalendar.currentCalendar() let components = calendar.components(.Second, fromDate: self) let seconds = components.second return seconds } func day() -> Int { // Get Day let calendar = NSCalendar.currentCalendar() let components = calendar.components(.Day, fromDate: self) let day = components.day return day } }
This simplifies the interface to NSDate:
// Get the time properties let currentDate = NSDate() let minutes = currentDate.minutes() let hours = currentDate.hours() let seconds = currentDate.seconds() let dayOfMonth = currentDate.day()
Pingback: How to write a Watch Face App for Apple Watch | musingstudio
Pingback: How to use the Digital Crown in a Watch Face App | musingstudio