Почему бы не запустить конструкторов удобства с “с”?

Используя класс MediaQuery:

MediaQueryData queryData;
queryData = MediaQuery.of(context);

MediaQuery : Устанавливает поддерево, в котором медиа-запросы разрешаются на данные.

MediaQueryData : информация о фрагменте мультимедиа (например, окне).

Чтобы получить Пиксельное соотношение устройств:

queryData.devicePixelRatio

Чтобы получить ширину и высоту экрана устройства:

queryData.size.width
queryData.size.height

Чтобы получить масштабный коэффициент текста:

queryData.textScaleFactor

Использование класса AspectRatio :

Из документа:

Виджет, который пытается определить размер дочернего элемента. конкретное соотношение сторон.

Виджет сначала пробует наибольшую ширину, разрешенную ограничениями макета. Высота виджета определяется путем применения заданного соотношения сторон к ширине, выраженного как отношение ширины к высоте.

Например, соотношение сторон по ширине и высоте 16: 9 будет иметь значение 16,0 / 9,0. Если максимальная ширина бесконечна, начальная ширина определяется путем применения соотношения сторон к максимальной высоте.

Теперь рассмотрим второй пример, на этот раз с соотношением сторон 2,0 и ограничениями макета, для которых ширина должна быть от 0,0 до 100,0, а высота - от 0,0 до 100,0. Мы выберем ширину 100.0 (максимально допустимая) и высоту 50.0 (чтобы соответствовать соотношению сторон).

//example
new Center(
 child: new AspectRatio(
  aspectRatio: 100 / 100,
  child: new Container(
    decoration: new BoxDecoration(
      shape: BoxShape.rectangle,
      color: Colors.orange,
      )
    ),
  ),
),

Также вы можете использовать :

8
задан casperOne 29 April 2012 в 15:58
поделиться

6 ответов

На самом деле существует техническая причина для этого. Если бы каждый метод типа shoelaceWithString: был изменен только на withString: , мы получили бы ужасающе огромное количество классов с одинаковыми именами методов и разными сигнатурами. Это играет злую шутку с проверкой статического типа компилятора и может привести к тому, что он будет выдавать всевозможные раздражающие и ненужные предупреждения.

Существует также аспект культуры Какао, в котором разработчикам нравится, чтобы их код самодокументировался. Это означает, что имена методов указывают как их аргументы, так и то, что они возвращают. Руководства Apple по кодированию на самом деле предупреждают о методах с расплывчатыми названиями, предлагая добавлять слова к имени, чтобы было понятно, что делает метод.

13
ответ дан 5 December 2019 в 05:45
поделиться

Я думаю, что это всего лишь часть общей философии «говорите именно то, что вы имеете в виду» многословной структуры какао. Несколько вариантов выбора:

[UIView setAnimationBeginsFromCurrentState]
[UITableView scrollToNearestSelectedRowAtScrollPosition]
[UIApplication didRegisterForRemoteNotificationsWithDeviceToken]

и т. Д.

ETA:

Чтобы ответить на вопросы конкретно о конструкторах, мне нравится то, как они сделаны, это то, что в x-коде легко определить, какие методы являются конструкторами. Типовые методы. Например, вы начинаете набирать:

[NSString string

И «intellisense» сокращает список методов до тех, которые начинаются со «string», которые, конечно же, являются методами конструктора (и все они также удобно сгруппированы вместе). То же самое применимо и к соглашению "init".

3
ответ дан 5 December 2019 в 05:45
поделиться

В конечном счете, я считаю, что философия Objective-C, воплощенная в фреймворках Cocoa (и фреймворках NextStep до него), заключается в том, что ясность и простота поддержки имеют приоритет над краткостью кода. Основным свидетельством этой философии является то, что селекторы Objective-C имеют именованные аргументы (например, - [NSObject performSelector: withObject:] ).

В случае фабричных методов, таких как + [NSString stringWithString:] , вы должны помнить, что подклассы могут переопределять эти методы класса для возврата подклассов (например, кластеры классов, такие как NSNumber ).

Таким образом, вы можете получить вызов типа [MyPoorlyNamedSubclass stringWithString:] , в этом случае - [MyPoorlyNamedSubclass withString: ] не будет очевидно информативным относительно типа возвращаемого объекта (напомним, что многие фабричные методы возвращают тип id ). stringWithString: , с другой стороны, дает понять, что метод вернет строку (или ее подкласс).

3
ответ дан 5 December 2019 в 05:45
поделиться

Они также используют это одно дополнительное слово, чтобы сказать, выпущен объект автоматически или нет. initWithFormat предназначен для неавтоматического выпуска, и когда его stringWithFormat автоматически выпускается ... Я думаю, они просто пошли этим способом сообщить читателю, какой тип управления памятью использует объект ...

2
ответ дан 5 December 2019 в 05:45
поделиться

Если вам это не нравится, почему бы не написать кучу операторов #define, которые вы включаете во все свои проекты?

-2
ответ дан 5 December 2019 в 05:45
поделиться

Потому что это согласованно.

Существуют такие методы, как:

[NSDictionary dictionary]
[NSArray array]

Избавление от всего до с помощью здесь явно не вариант. Сохранение этих, но сокращение других приведет к несогласованности в именовании удобных методов.

А удобные методы совместимы с init и initWith… методами.

10
ответ дан 5 December 2019 в 05:45
поделиться