package Ġcom . max im b irc u . devtools . common . stores Ċ Ċ import Ġcom . max im b irc u . devtools . common . core . Dev Tool Ċ import Ġplatform . Foundation . NS User Defaults Ċ import Ġplatform . darwin . NSInteger Ċ Ċ actual Ġopen Ġclass ĠPreferences Tool Store Impl < T Ġ: ĠAny > Ġactual Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġtool : ĠDev Tool < T > Ċ ) Ġ: ĠPreferences Tool Store < T > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġns User Defaults : ĠNS User Defaults Ġ= ĠNS User Defaults (" DEV _ TOOLS _${ tool . container Name }") ĊĊĠĠĠ Ġoverride Ġvar Ġis Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġns User Defaults . set Bool ( value , Ġ"${ tool . key }_ enabled ") Ġ} ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġns User Defaults . get ("${ tool . key }_ enabled ", Ġtool . default Enabled Value ) ĊĊĠĠĠ Ġoverride Ġvar Ġvalue : ĠT ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġns User Defaults . get ( tool . key , Ġtool . getDefault Value ()) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġns User Defaults . set ( value , Ġtool . key ) Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠAny > ĠNS User Defaults . get ( key : ĠString , ĠdefaultValue : ĠT ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( object ForKey ( key ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( defaultValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNS Integer Ġ-> Ġinteger ForKey ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġobject ForKey ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloat Ġ-> Ġfloat ForKey ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBoolean Ġ-> Ġbool ForKey ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDouble Ġ-> Ġdouble ForKey ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException ("${ defaultValue :: class } Ġis Ġnot Ġsupported !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠdefaultValue ĊĠĠĠ Ġ} Ġas ĠT Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠAny > ĠNS User Defaults . set ( value : ĠT , Ġkey : ĠString ) Ġ{ ĊĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠNS Integer Ġ-> Ġset Integer ( value , Ġkey ) ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġset Object ( value , Ġkey ) ĊĠĠĠĠĠĠĠ Ġis ĠFloat Ġ-> Ġset Float ( value , Ġkey ) ĊĠĠĠĠĠĠĠ Ġis ĠBoolean Ġ-> Ġset Bool ( value , Ġkey ) ĊĠĠĠĠĠĠĠ Ġis ĠDouble Ġ-> Ġset Double ( value , Ġkey ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException ("${ value :: class } Ġis Ġnot Ġsupported !") ĊĠĠĠ Ġ} Ċ } Ċ