2014-10-22 15 views
6

Kiedyś ten kodNie można znaleźć przeciążenie dla „init”, który akceptuje dostarczonych argumentów SWIFT

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

i Dostaję błąd „nie można odnaleźć przeciążenie dla«init», który akceptuje dostarczonych argumentów "

+0

Nieco inna kwestia, ale w zasadzie ten sam problem: http://stackoverflow.com/questions/26499815/nsfontattributedstring-worked-before-xcode-6-1/26500637#26500637 –

Odpowiedz

14

UIFont(name:size:) jest terazniezadowalającym inicjatorem - zwróci nil, jeśli nie będzie mógł znaleźć tej czcionki i zawiesi twoją aplikację, jeśli odtworzysz wartość zwracaną. Użyj tego kodu, aby bezpiecznie dotrzeć czcionkę i używać go:

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

Użyj tego

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

czy ten

if let font = UIFont(name:"HelveticaNeue-Light", size: 20.0) { 
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: font] 
} 
+0

proszę zobaczyć edytowane odpowiedź – ZAZ

+0

Nie potrzebujesz '!' Po 'UIcolor.whiteColor()', ponieważ nie zwraca opcjonalnego. W rzeczywistości użycie go da błąd kompilatora. – chrysAllwood

0

Innym podejściem jest stworzenie słownika przed ustawieniem titleTextAttributes. Pozwala to uniknąć innych, co byłoby bardziej korzystne w przypadku, gdy chciałbyś ustawić dalsze parametry również za pomocą failable initialiserów. Np:

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 
Powiązane problemy