import Cocoaclass MYVIEw: NSVIEw { init(frame: NSRect) { super.init(frame: frame) } overrIDe func drawRect(dirtyRect: NSRect) { super.drawRect(dirtyRect) NScolor .redcolor() .set() NSRectFill(self.bounds) var p :CGMutablePathref = CGPathCreateMutable() var ctx = NSGraphicsContext.currentContext().graphicsPort() CGContextAddpath(ctx,p) // compiler rejects this line }}
你怎么理解这个错误信息?
Cannot convert the Expression's type 'VoID' to type 'CGContext!'
CGContextAddpath的Swift签名是:
func CGContextAddpath(context: CGContext!,path: CGPath!)
我的错误是什么?
我用这个时:
let context = UnsafePointer<CGContext>(ctx).memory
我现在有一个运行时错误:
Jun 3 15:57:13 xxx.x SwiftTest [57092]<错误>:CGContextAddpath:无效的上下文0x7fff73bd0060.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.
这是我目前使用的代码:
import Cocoaclass MYVIEw: NSVIEw { init(frame: NSRect) { super.init(frame: frame) } overrIDe func drawRect(dirtyRect: NSRect) { super.drawRect(dirtyRect) var p :CGMutablePathref = CGPathCreateMutablecopy( CGPathCreateWithRoundedRect(self.bounds,10,nil)) var ctx = NSGraphicsContext.currentContext().graphicsPort() let context = UnsafePointer<CGContext>(ctx).memory CGContextAddpath(context,p) // compiler no longer rejects this line var bluecolor = NScolor.bluecolor() CGContextSetstrokecolorWithcolor(context,NScolor.bluecolor().CGcolor) CGContextSetlinewidth(context,2) CGContextstrokePath(context) }}截至Swift 1.0
如果您的部署目标是10.10,则可以使用Yosemite引入的便捷方法.
let context = NSGraphicsContext.currentContext().CGContext
如果你必须支持10.9,你必须按照下面的方法手动转换上下文.
let contextPtr = NSGraphicsContext.currentContext().graphicsPortlet context = unsafeBitCast(contextPtr,CGContext.self)总结
以上是内存溢出为你收集整理的swift – 如何使用Implicitly Unwrapped Optionals?全部内容,希望文章能够帮你解决swift – 如何使用Implicitly Unwrapped Optionals?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)