Как определить, что для .background () требуется указанный цвет, чтобы затем ввести .colorName (в качестве модификатора текста) - PullRequest
1 голос
/ 15 апреля 2020

Пример кода:

   Text("Hello")
      .background(Color.blue)
      .foregroundColor(.white)

Я понимаю, что .background () требует от меня указать Color .colorName в скобках, в то время как .foregroundColor () позволяет мне указывать имя .colorName прямо внутри.

Это заставило меня взглянуть на документы.

.foregroundColor

func foregroundColor(_ color: Color?) -> some View

.background

func background<Background>(_ background: Background, alignment: Alignment = .center) -> some View where Background : View

Итак, .foregroundColor занимает в цветовой структуре. Достаточно просто. В то время как .background принимает ... Фон? Что это такое? Я ничего не смог найти в Google.

Мой главный вопрос (для дальнейшего использования с помощью других функций) заключается в том, что .background может принимать цвет, указав Color.colorName.

Как я мог узнать это, глядя на документы?

Я не хочу «просто знать», что .background может принимать цвет, указав Color.colorName. Что более вероятно, так это то, что я кодирую это без предварительного размещения Color внутри .background () примерно так:

   Text("Hello")
      .background(.blue)
      .foregroundColor(.white)

Я получаю сообщение об ошибке, которое не понимаю:

Cannot infer contextual base in reference to member 'blue'

Проверьте документы.

Понимаете, что .background принимает ... Фон?

Учитывая такую ​​ситуацию, как я могу сделать вывод, что мне нужно указать Color.colorName внутри .background? Или этот .background вообще может принимать .colorName в качестве входных данных?

1 Ответ

1 голос
/ 15 апреля 2020

.background принимает View Color.blue работает как представление, но вы также можете легко использовать .background(Circle())

func background<Background>(_ background: Background, alignment: Alignment = .center) -> some View where Background : View

Вы спросили, как это сказать Фон является общим c View. Если вы посмотрите на опубликованную вами декларацию, вы увидите: where Background : View. Это говорит о том, что Background является родовым c, но должен соответствовать View.

, в то время как .foregroundColor специально принимает только Color, поэтому тип на сайте вызова может быть выведен компилятором.

func foregroundColor(_ color: Color?) -> some View


На сайте вызовов Xcode покажет, что ожидает просмотр.

Xcode completion


С точки зрения функциональности воспринимайте .background как противоположность .overlay, а не как модификатор цвета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...