У меня странная ситуация в 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]
}