2015-02-12 5 views
0

Я пытаюсь написать расширение UIFont для написанного проекта Swift. Я получаю сообщение об ошибке «AnyObject не конвертируется в String». Как мне это решить. Вот что я сделалРасширение UIFont в SWIFT

func listAllFontsOnSystem(){ 

    var familyNames = NSArray(array: UIFont.familyNames()) 
    var fontNames = [] 
    var indFamily, indFont : NSInteger 
    for (indFamily = 0 ; indFamily<familyNames.count; ++indFamily){ 
    //Error on next line 
     fontNames = NSArray(array: UIFont.fontNamesForFamilyName(familyNames .objectAtIndex(indFamily))) 
     for indFont = 0; indFont<fontNames.count; ++indFont{ 
     print(fontNames.objectAtIndex(indFont)) 
     } 
    } 
} 

ответ

2
UIFont.fontNamesForFamilyName(familyNames.objectAtIndex(indFamily)) 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

objectAtIndex, будучи метод Objective-C, который возвращает id, возвращает AnyObject экземпляр в Swift, а не строка. Вы можете «трансформировать» это в String.

fontNames = NSArray(array: UIFont.fontNamesForFamilyName(
       familyNames.objectAtIndex(indFamily) as String)) 

Это как версия с более Swift и менее Objective-C будет выглядеть следующим образом:

class func listAllFontsOnSystem2(){ 
    let familyNames = UIFont.familyNames() as [String] 
    for familyName in familyNames { 
     let fontNames = UIFont.fontNamesForFamilyName(familyName) as [String] 
     for fontName in fontNames { 
      println(fontName) 
     } 
    } 
} 
+0

@MattiasBauch спасибо за объяснения, высоко ценится. Мне нравится, как минимальный код нужен в Swift :) – DrPatience

1

Попробуйте этот код. UIFont.familyNames возвращает массив AnyObject, т. Е. [AnyObject]. Он должен быть перенесен в массив строки, то есть [String].

func listAllFontsOnSystem(){ 

    var familyNames = UIFont.familyNames() as [String] 
    for familyName in familyNames { 
     let fontNames = UIFont.fontNamesForFamilyName(familyName) as [String] 
     for fontName in fontNames { 
      println(fontName) 
     } 
    } 
} 
+1

большое спасибо, это будет работать – DrPatience

Смежные вопросы