Тип выражения 'NSLayoutConstraint' является неоднозначным без дополнительного контекста - PullRequest
0 голосов
/ 16 октября 2019

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

Ошибка: тип выражения 'NSLayoutConstraint' является неоднозначным без дополнительного контекста

Код:

private func centerIndicator() {
    let xCenterConstraint = NSLayoutConstraint(
        item: loadingView ?? default value, attribute: .centerX, relatedBy: .equal,
      toItem: indicator, attribute: .centerX, multiplier: 1, constant: 0
    )
    loadingView.addConstraint(xCenterConstraint)

    let yCenterConstraint = NSLayoutConstraint(
      item: loadingView, attribute: .centerY, relatedBy: .equal,
      toItem: indicator, attribute: .centerY, multiplier: 1, constant: 0
    )
    loadingView.addConstraint(yCenterConstraint)
  }

1 Ответ

1 голос
/ 16 октября 2019

Ваш наиболее вероятный виновник - default value, его там быть не должно. Если loadingView не является обязательным, вы можете просто удалить ?? default value. Если является необязательным, то вам, вероятно, следует поместить его в блок if let loadingView = loadingView. Установка ограничений для случайных представлений не будет работать.

Далее, Apple больше не предлагает добавлять ограничения для представлений напрямую. Вместо этого используйте свойство isActive.

NSLayoutConstraint(
      item: loadingView, attribute: .centerY, relatedBy: .equal,
      toItem: indicator, attribute: .centerY, multiplier: 1, constant: 0
).isActive = true

Но это довольно простые ограничения. Еще лучше использовать вместо этого якоря макетов.

loadingView.centerYAnchor.constraint(equalTo: indicator.centerYAnchor).isActive = true
...