func studiotrackingcost(studiotrackingdays: int, studiotrackingrate: double) -> double { return double(studiotrackingdays) * studiotrackingrate } func studiooverdubcost(studiooverdubdays: int, studiooverdubrate: double) -> double { return double(studiooverdubdays) * studiooverdubrate } func studiomixingcost(studiomixingdays: int, studiomixingrate: double) -> double { return double(studiomixingdays) * studiomixingrate }
not sure looking for, if want define function receives 6 params , returns sum of results of 3 functions then...
func tot( studiotrackingdays: int, studiotrackingrate: double, studiooverdubdays: int, studiooverdubrate: double, studiomixingdays: int, studiomixingrate: double ) -> double { return studiotrackingcost(studiotrackingdays, studiotrackingrate: studiotrackingrate) + studiooverdubcost(studiooverdubdays, studiooverdubrate: studiooverdubrate) + studiomixingcost(studiomixingdays, studiomixingrate: studiomixingrate) }
let's go crazy
let's define type alias
parameters accepted functions
typealias paramtype = (int, double)
and type alias
represents functions
typealias functiontype = paramtype -> double
now can define function tot
accepts list of tuples, every tuple
element of type functiontype
, of type paramtype
.
func tot(elms: (logic: functiontype, params: paramtype)...) -> double { return elms.reduce(0) { (res, elm) -> double in return elm.logic(elm.params) } }
finally can invoke tot
passing variable number of params this
tot( (logic: studiotrackingcost, params: (1,2)), (logic: studiooverdubcost, params: (3,4)), (logic: studiomixingcost, params: (5,6)) )
or this
tot( (logic: studiotrackingcost, params: (1,2)), (logic: studiooverdubcost, params: (3,4)) )
or this
tot((logic: studiotrackingcost, params: (1,2)))
Comments
Post a Comment