В init: литерал гетерогенной коллекции может быть выведен только как '[NSAttributedStringKey: Any]' - PullRequest
0 голосов
/ 02 мая 2018

У меня странная ситуация в Swift 3:

Когда я пишу следующий код:

let color = UIColor.white

init() {
  super.init()

  let attributes = [NSAttributedStringKey.font:UIFont.systemFont(ofSize: 10),
         NSAttributedStringKey.foregroundColor: color]
}

Я получаю ошибку Heterogeneous collection literal could only be inferred to '[NSAttributedStringKey : Any]'; add explicit type annotation if this is intentional.

Я полностью понимаю это.

НО:

Когда я пишу это так:

init() {
  super.init()

  let color = UIColor.white
  let attributes = [NSAttributedStringKey.font:UIFont.systemFont(ofSize: 10),
         NSAttributedStringKey.foregroundColor: color]
}

, или как это:

static let color = UIColor.white

init() {
  super.init()

  let attributes = [NSAttributedStringKey.font:UIFont.systemFont(ofSize: 10),
         NSAttributedStringKey.foregroundColor: MyClass.color]
}

, или определите переменную атрибутов в другой функции (не init), она работает без ошибки.

Это должно быть что-то особенное с состоянием атрибутов во время функции инициализации, но кто-нибудь лучше понимает, в чем именно проблема?

Сложение:

Это также работает:

let color = UIColor.white

init() {
  super.init()

  let color2 = color
  let attributes = [NSAttributedStringKey.font:UIFont.systemFont(ofSize: 10),
         NSAttributedStringKey.foregroundColor: color2]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...