xcode - Swift:获取有关函数参数类型错误的更多详细信息

标签 xcode swift llvm

我正在使用 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。

有没有办法让编译器在这方面更聪明?

最佳答案

问题可能是您正在查看的关于 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:我遇到了你遇到的同样问题,当我找不到解决方案时感到非常沮丧。

关于xcode - Swift:获取有关函数参数类型错误的更多详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30124271/

相关文章:

ios - swift ios 一遍又一遍地更改 uilabel 文本值

ios - 如何使用 UITouch 检测圆形水龙头?

json - 在 swift 4 中解析 JSON 时出错

swift - 带有 Swift Cocoa 框架的 macOS 命令行工具 : Library not loaded

rust - 通过 rust 进行 LLVM 调试输出

objective-c - 在没有 Doxygen/编译器警告的情况下记录继承的 Obj-C 方法?

swift - xcode TableView Controller 搜索多个数组

swift - 在 UINavigationController 中更改 UINavigationBar 的约束

c++ - 如何从 LLVM 中的 phinode 及其相应的 basicblocks 获取标签?

clang - 在 C 代码中使用 memcpy 并使用 wasm 目标进行编译时出现 llvm-link 错误