Swift 4 有一个新的 NSRect.fill() 函数来代替 NSRectFill()。当尝试使用 NSColor.clear.setFill() 清除位图时,位图使用 NSRect.fill() 保持不变。
一种解决方法是使用 NSRect.fill(using:) 并指定 .copy。
以下是 Swift 4 中 Playgrounds 中代码的作用:
示例代码:
// Duplicating a bug with Xcode 9 and Swift 4
import Cocoa
var image = NSImage(size: NSSize(width: 32, height: 32))
let rect = NSRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
image.lockFocus()
NSColor.red.setFill()
rect.fill()
image.unlockFocus()
image.lockFocus()
NSColor.clear.setFill()
// calling fill() with a clear color does not work
rect.fill()
image.unlockFocus()
// Image above should not be red
image.lockFocus()
NSColor.clear.setFill()
// using fill(using:) does work
rect.fill(using: .copy)
image.unlockFocus()
// image above is properly cleared
这是我应该向 Apple 提交的错误还是我遗漏了什么?这个序列在 Swift 3 中使用 NSRectFill() 工作。