ios - SWIFT 中的 UIFont 扩展

标签 ios swift uifont

我正在尝试为 Swift 编写的项目编写一个 UIFont 扩展。我收到错误“AnyObject 不可转换为字符串”。我该如何解决这个问题。这是我所做的

 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))
        }
    }
}

最佳答案

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

objectAtIndex 是一个返回 id 的 Objective-C 方法,在 Swift 中返回一个 AnyObject 实例,而不是一个字符串。您可以将其“转换”为 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)
        }
    }
}

关于ios - SWIFT 中的 UIFont 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28474232/

相关文章:

swift 2错误: Solve "Type of expression is ambiguous without more context"

swift - 如何更改不同文件中变量的值?

swift - 如何在快速测试中使用用户定义的配置变量作为 @testable import 中的模块名称?

ios - 更改后退导航栏按钮的字体

ios - 如何在iOS上使用Parse与其他用户共享对象?

ios - 如何在 Swift 2.2 中编写这些函数?

ios - "Invariant Violation: Application AwesomeProject has not been registered"使用静态 jsbundle 为 iOS 设备构建时

ios - 如何从 swift 中的 didUpdateToLocation 方法获取旧位置值

ios - NSMutableAttributedString 使用自定义字体崩溃

ios - 无法在 XCode 中为 UILabel 设置自定义字体