Не удалось найти перегрузку для "init", которая принимает предоставленные аргументы SWIFT

Я использовал этот код

    self.navigationController?.navigationBar.titleTextAttributes =
        [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 20),
        NSForegroundColorAttributeName: UIColor.whiteColor()]

и я получаю ошибку "Не удалось найти перегрузку для" init ", которая принимает предоставленные аргументы

+6
источник поделиться
3 ответа

UIFont(name:size:) теперь является отказоустойчивым инициализатором - он вернет nil, если он не сможет найти этот шрифт и разбивать ваше приложение, если вы разворачиваете возвращаемое значение. Используйте этот код, чтобы безопасно получить шрифт и использовать его:

if let font = UIFont(name: "HelveticaNeue-Light", size: 20) {
    self.navigationController?.navigationBar.titleTextAttributes = 
            [NSFontAttributeName: font, 
             NSForegroundColorAttributeName: UIColor.whiteColor()]
}
+14
источник

Используйте этот

self.navigationController?.navigationBar.titleTextAttributes =
        [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 20)!,
        NSForegroundColorAttributeName: UIColor.whiteColor()!]

или этот

if let font = UIFont(name:"HelveticaNeue-Light", size: 20.0) {
    self.navigationController?.navigationBar.titleTextAttributes  = [NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: font]
}
0
источник

Другой подход заключается в создании словаря перед установкой titleTextAttributes. Это просто избегает вас иначе, что было бы более полезным в тех случаях, когда вы хотели бы установить дополнительные параметры, также используя отказоустойчивые инициализаторы. Например:

var attributes : [NSObject : AnyObject] = [NSForegroundColorAttributeName : UIColor.whiteColor()]

if let font = UIFont(name: "Helvetica", size: 20) {
    attributes[NSFontAttributeName] = font
}

if let someData = NSData(contentsOfFile: "dataPath") {
    attributes["imageData"] = someData
}

self.myObject.attributes = attributes
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос