swift – 如何使用Implicitly Unwrapped Optionals?

swift – 如何使用Implicitly Unwrapped Optionals?,第1张

概述我正在将NSView移植到 Swift,我需要使用Quartz CGContextAddPath. import Cocoaclass MYView: NSView { init(frame: NSRect) { super.init(frame: frame) } override func drawRect(dirtyRect: NSRect) 我正在将NSVIEw移植到 Swift,我需要使用Quartz CGContextAddpath.
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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存