Вам необходимо добавить новую кнопку в качестве подпредставления в классе представления вашего ViewController, чтобы она отображалась в пользовательском интерфейсе.
func addNewButton(title: String)
{
let butt: UIButton = UIButton()
..
..
self.view.addSubview(butt)
}
Интересное сообщение об ошибке (я не знал, что оператор '==' проверит их). Но, основываясь на этом, я подозреваю, что ваше сравнение неверно: вы пытаетесь увидеть, является ли класс Field (теоретически его суперкласс, но только теоретически - Field является окончательным) тем же, что и Double.class, чего не может быть
Итак: да, сравнение должно работать, если вы дадите правильные аргументы. Поэтому я подозреваю, что вы хотите сделать:
if (f.getType () == Double.class)
вместо этого. И это должно сработать, учитывая, что Double является последним классом. В противном случае «isAssignableFrom» будет более подходящим.
Если у вас есть объекты, используйте
if (f instanceof Double) { }
Еще одна интересная вещь - это метод isAssignableFrom:
if (f.getClass().isAssignableFrom (Double.class)) { }
Но в целом это плохой стиль. Используйте полиморфизм для реализации логики, которая зависит от типов классов.
Ответ на комментарий: f instanceof Double отлично работает.
Вы, вероятно, написали что-то вроде этого:
float f = 1.1f;
if (f instanceof Double) { ..}
И умный компилятор Java говорит, что у вас есть CE. НО:
public static boolean isInstanceOfDouble (Object obj) {
return obj instanceof Double;
}
psvm (String [] args) {
sout (isInstanceOfDouble (1.1f);
}
.. это отлично работает
Вы должны использовать getType (), чтобы получить базовый тип, а не получить класс. getType () возвращает класс базового типа по мере необходимости.
код выглядит следующим образом:
if(f.getType().equals(Double.class))
Простейшим способом было бы
if (f.getClass().equals(Double.class))
Редактировать: Ах, теперь я вижу проблему. Ошибка, которую вы получили, заключалась в том, что (в результате обобщений) компилятор мог сказать, что классы никогда не будут равны ( Field.class
не может быть равен Double.class
). Использование .equals () превращает его в предупреждение, а не в ошибку, но это все еще неправильный код.
Field.getType ()
дает вам тип поля. Поскольку это не может быть известно во время компиляции, вы не получите ошибку, если будете использовать оператор ==
, как вы это делали изначально.