Как инициализировать атрибут let text - PullRequest
0 голосов
/ 02 октября 2018

У меня есть текстовый атрибут для цвета переднего плана, который я хочу использовать в приписанных строках.Атрибут является константой let в моем классе, и я хочу инициализировать его с UIColor, который я передаю в init для класса.

class LocationOptions {
    let live : NSAttributedString.Key!
    let black = [NSAttributedString.Key.foregroundColor: UIColor.black]
    let grey = [NSAttributedString.Key.foregroundColor: UIColor.gray]
    let findingLocation: NSAttributedString!
    let centralLondon: NSAttributedString!
    let allLondon: NSAttributedString!


init(color: UIColor){
        live = [NSAttributedString.Key.foregroundColor: color]
        findingLocation = NSAttributedString(string: "Finding Location...", attributes: grey)
        centralLondon = NSAttributedString(string: "Central London", attributes: black)
        allLondon = NSAttributedString(string: "All London", attributes: black)
    }
    ....

С этим кодом появляется компиляторс ошибкой, когда я присваиваю live:

Невозможно назначить значение типа '[NSAttributedString.Key: UIColor]' для типа 'NSAttributedString.Key'

ЕслиЯ изменяю объявление live на

let live: NSAttributedString.Key.foregroundColor!

Компилятор выдает ошибку, когда я объявляю live:

Статический let 'foregroundColor' не является членомтип 'NSAttributedString.Key'

Как мне инициализировать текстовый атрибут, подобный этому?

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Проблема здесь…

let live : NSAttributedString.Key!

live имеет тип NSAttributedString.Key!, но вы назначаете ему словарь.

Если live - использование цвета:

let live : UIColor

, если это словарь атрибутов, используйте:

let live : [NSAttributedString.Key: Any]
0 голосов
/ 02 октября 2018

Просто объявите live как

let live: [NSAttributedString.Key : UIColor]!

NSAttributedString.Key.foregroundColor! не может быть типом для live, потому что это не тип, это свойство.Объявив live как [NSAttributedString.Key : UIColor], вы можете присвоить ему словарь, в то же время имея возможность инициализировать NSAttributedString более простым способом.

0 голосов
/ 02 октября 2018

Это потому, что ему нужен словарь атрибутов.

//This is only key and you cannot assign a attribute to it 
let live = NSAttributedString.Key! 

//this is only value
let live: NSAttributedString.Key.foregroundColor!

These won't work.Вы можете заставить их работать следующим образом:

class LocationOptions {
    let live: [NSAttributedString.Key : Any]

    init(color: UIColor) {
        live = [NSAttributedString.Key.foregroundColor: color]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...