我正在使用Xcode 6.3.1和Swift。
当一个带有多个参数的函数在参数类型上出现错误时,很难知道哪个参数是错误的。
例如,CGBitmapContextCreate()
,此代码:
let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)
let context = CGBitmapContextCreate(nil, UInt(size.width), UInt(size.height), 8, 0, colorSpace, bitmapInfo)
会产生如下错误:
MyFile.swift:23:19: Cannot invoke 'CGBitmapContextCreate' with an argument list of type '(nil, UInt, UInt, Int, Int, CGColorSpace, CGBitmapInfo)'
通过仔细比较文档和我的参数列表,我发现它是第二个和第三个参数,应该是Int。
有没有办法让编译器更加智能化?
答案 0 :(得分:2)
根据您在编译时实际访问的定义,问题可能是您在查看CGBitmapContextCreate
的联机文档时出错了。
最后一个参数必须是UInt32
类型,CGBitmapInfo
返回一个CGBitmapInfo
对象。这就是编译器错误的原因。您传递的参数类型错误。您甚至可以右键单击该功能并单击"查看定义",这将验证我在说什么。
尝试直接传递CGImageAlphaInfo.PremultipliedLast.rawValue
,因为它正在寻找的UInt32。
示例解决方案:
let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGImageAlphaInfo.PremultipliedLast.rawValue
let context = CGBitmapContextCreate(nil, UInt(size.width), UInt(size.height), 8, 0, colorSpace, bitmapInfo)
您将发现您将能够编译源代码并获得预期结果。请注意,您仍然可以对此值应用任何按位操作。
PS:我遇到了同样的问题,当我无法找到解决方案时,我感到非常沮丧。答案 1 :(得分:0)
有效!
let width = CGImageGetWidth(image)
let height = CGImageGetHeight(image)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bytesPerRow = 4 * width;
let bitsPerComponent :Int = 8
let pixels = UnsafeMutablePointer<UInt8>(malloc(width*height*4))
var context = CGBitmapContextCreate(pixels, width, height, bitsPerComponent, bytesPerRow, colorSpace, CGBitmapInfo())