我在向全局数组添加CTFrame对象时发现了一个问题(问题在于:
Issue when appending a CTFrame to a Swift Array)当我挖掘北斗时,AnyObject
不透明类型的CTFrame
兼容性似乎存在问题
考虑以下因素:
var path = CGPathCreateMutable()
CGPathAddRect(path, nil, self.view.frame)
let framesetter = CTFramesetterCreateWithAttributedString(NSAttributedString())
let ctFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, nil);
var ctFramesArray = Array<CTFrame>() // CTFrame type declaration works fine
ctFramesArray.append(ctFrame) // ctFrame is valid can be added to a local array
let object: AnyObject = ctFrame
let frame: CTFrame = object as CTFrame // This line generates the linker error
我创建了一个带有空attrString的简单CTFrame
对象(结果与复杂的attrString相同)。该对象是有效的,我可以println()
它,它可以添加到本地声明的数组。但是如果我将CTFrame
对象转换为AnyObject
并尝试从AnyObject对象创建一个新的CTFrame
对象,编译器会抱怨并建议添加为CTFrame(强制转换)。
问题在于,假设添加了CoreText框架并且使用了CTFrame类型(例如,在声明时)Xcode报告了一个奇怪的Undefined symbols for architecture i386: "_OBJC_CLASS_$_CTFrame", referenced from:,
,项目将不会编译数组,以及渲染CTFrames时。)
我可能会遗漏一些东西吗?
..ë