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