Вы можете использовать нижеприведенный код для получения текущего часового пояса
func getCurrentTimeZone() -> String{
return String (TimeZone.current.identifier)
}
let currentTimeZone = getCurrentTimeZone()
print(currentTimeZone)
Я не видел содержания городского картофеля (его пух), но я и Смелч пришли к решению. Сама форма
наследуется от абстрактного класса, поэтому они не говорят вам, что это единственный 1-й уровень наследования, который не может быть абстрактным, а 2-й уровень ниже может.
Оттуда просто нужно иметь пустой класс посередине и обернуть #if debug
вокруг объявления форм, и все готово. Просто убедитесь, что выпускаете в режиме выпуска, а проектируете в режиме отладки (что очень типично).
Вы получите полную поддержку дизайнера и реальный абстрактный базовый класс во время проектирования (отладки) и сборки (выпуска), потому что каждый раз он заканчивается использованием вашего абстрактного базового класса.
Можно решить это использование атрибута на абстрактном классе как следующий
[TypeDescriptionProvider(typeof(AbstractControlDescriptionProvider<MyBaseFormEf, Form>))]
, Это будет работать на каждый случай, где Вам нужен он. AbstractControlDescriptionProvider ниже
public class AbstractControlDescriptionProvider<TAbstract, TBase> : TypeDescriptionProvider
{
public AbstractControlDescriptionProvider()
: base(TypeDescriptor.GetProvider(typeof(TAbstract)))
{
}
public override Type GetReflectionType(Type objectType, object instance)
{
if (objectType == typeof(TAbstract))
return typeof(TBase);
return base.GetReflectionType(objectType, instance);
}
public override object CreateInstance(IServiceProvider provider, Type objectType, Type[] argTypes, object[] args)
{
if (objectType == typeof(TAbstract))
objectType = typeof(TBase);
return base.CreateInstance(provider, objectType, argTypes, args);
}
}