我正在尝试为 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/