public override void TweakDidChange(MPTweak tweak) { List <TweakBindingImpl> bindings = new List <TweakBindingImpl>(); var tweakBindings = _tweak._bindings; lock (tweakBindings) { for (var i = tweakBindings.Count - 1; i >= 0; i--) { var current = tweakBindings[i]; TweakBindingImpl binding; if (!current.TryGetTarget(out binding) || binding.IsDisposed) { tweakBindings.RemoveAt(i); } bindings.Add(binding); } } var val = _tweak.GetValue(); foreach (var binding in bindings) { binding.Apply(val); } }
private static MPTweak CreateMixpanelTweak(Tweak tweak) { var tweakType = tweak.GetType(); var valueType = tweakType.GetGenericArguments()[0]; MPTweak mpTweak; if (valueType == typeof(int)) { mpTweak = new MPTweak(tweak.Name, "i"); mpTweak.DefaultValue = NSNumber.FromInt32((int)tweak.DefaultValue); if (tweak.Min != null) { mpTweak.MinimumValue = NSNumber.FromInt32((int)tweak.Min); } if (tweak.Max != null) { mpTweak.MaximumValue = NSNumber.FromInt32((int)tweak.Max); } } else if (valueType == typeof(float)) { mpTweak = new MPTweak(tweak.Name, "f"); mpTweak.DefaultValue = NSNumber.FromFloat((float)tweak.DefaultValue); if (tweak.Min != null) { mpTweak.MinimumValue = NSNumber.FromFloat((float)tweak.Min); } if (tweak.Max != null) { mpTweak.MaximumValue = NSNumber.FromFloat((float)tweak.Max); } } else if (valueType == typeof(bool)) { mpTweak = new MPTweak(tweak.Name, "c"); mpTweak.DefaultValue = NSNumber.FromBoolean((bool)tweak.DefaultValue); } else if (valueType == typeof(string)) { mpTweak = new MPTweak(tweak.Name, "@"); mpTweak.DefaultValue = new NSString((string)tweak.DefaultValue); } else { throw new InvalidOperationException($"Type {valueType} is not supported as a tweak value type. Supported types: bool, int, float, string."); } return(mpTweak); }