Swift: прекрасное и ужасное в одном лице
Изучаю в свободное время Swift и как язык он мне нравиться, но есть вещи — которые откровенно меня начинают немного раздражать.
Возьмем к примеру отрисовку фигур и нарисуем треугольник на C#
Point p1 = new Point(0, 50); Point p2 = new Point(50, 0); Point p3 = new Point(50, 100); StreamGeometry streamGeometry = new StreamGeometry(); using (StreamGeometryContext geometryContext = streamGeometry.Open()) { geometryContext.BeginFigure(p1, true, true); PointCollection points = new PointCollection{ p2, p3 }; geometryContext.PolyLineTo(points, true, true); } streamGeometry.Freeze(); context.DrawGeometry(Brushes.Red, new Pen(Brushes.Red,3), streamGeometry);
Все довольно понятно и обратите внимание, как передается цвет, толщина линий и все остальное — все передается как параметры в метод: context.DrawGeometry(Brushes.Red, new Pen(Brushes.Red,3), streamGeometry);
Теперь возьмем и нарисуем треугольник на Swift.
let trianglePath = UIBezierPath() trianglePath.moveToPoint(CGPoint(x: 5.0, y: 95.0)) // #1 trianglePath.addLineToPoint(CGPoint(x: 50.0, y: 12.5)) // #2 trianglePath.addLineToPoint(CGPoint(x: 95.0, y: 95.0)) // #3 trianglePath.closePath()
Что тоже довольно понятно. И теперь — что бы нарисовать этот треугольник скажем залитым внутри красным цветом я должен сделать вот так
UIColor.redColor().setFill()
Выглядит ужасно — я должен вызвать статический typed-method у совершенного другого типа, которые по коду явно не влияет на «context» и сразу возникает несколько моментов, а что если вызвать этот метод до создание UIBezierPath, или после метода trianglePath.fill(), что будет если я его вызову просто в коде или вызову дважды итд итд...
Возможно кто-то с больший опытом в мобильной разработке меня поправит или скажет, что это хорошо.
PS: Ну и сам класс -UIBezierPath()- называется в честь кривых Безье, я не против, но его надо помнить в противовес DrawingContext, который запомнить гораздо легче..
Найкращі коментарі пропустити