【问题标题】:How to compare CGError in Swift如何在 Swift 中比较 CGError
【发布时间】:2014-10-24 19:25:22
【问题描述】:

下面的代码在if 行上给出了编译器错误:"Cannot invoke '!=' with an argument list of type '(CGError, _CGError)'"

var fadeToken: CGDisplayFadeReservationToken = 0
let fadeReservationError = CGAcquireDisplayFadeReservation(0.5, &fadeToken)
if fadeReservationError != kCGErrorSuccess {
    println("Failed to fade screen")
}

我尝试强制转换kCGErrorSuccess as CGError,并将两个操作数都转换为Int,但都给出了其他错误。好像Int32 类型(其中CGErrortypealias)无法比较:对吗?

我正在使用 Xcode 6.1 的公开版本

【问题讨论】:

    标签: swift comparison core-graphics quartz-graphics core-foundation


    【解决方案1】:

    我通过查看kCGErrorSuccess 的 Swift 定义发现了这一点:

    struct _CGError {
        init(_ value: UInt32)
        var value: UInt32
    }
    var kCGErrorSuccess: _CGError { get }
    ...
    typealias CGError = Int32
    

    就是这样:CGError 被定义为Int32,而它的潜在值被定义为UInt32。取常量的.value 并将两个操作数转换为Int 就像这样,清除了编译器错误:

    if Int(fadeReservationError) != Int(kCGErrorSuccess.value) {
    

    【讨论】:

    • 很棒的工作 DOV!碰巧你知道所有CGError 的列表在哪里吗?例如,我试图弄清楚 1000268435459 的值是什么意思
    • @Noitidart 我跳到CGError 的定义找到我发布的那个。如果其余的都不在那里,我不知道该去哪里
    • 感谢 Dov 的快速回复,我实际上是这方面的初学者,跳转到定义是什么意思?我实际上是通过 ctypes 做这些事情的,所以我没有 xcode 或 C/C++ 环境。
    • @Noitidart 哦,我说的是 Xcode 中的命令。你有一台苹果电脑吗?即使您不使用 Xcode 进行开发,您仍然可以使用它来浏览标题(它在 Mac App Store 上是免费的)。在 Xcode 中,您可以使用 Navigate -> Jump to Definition 菜单,或 ^⌘J 键盘快捷键。否则,我不知道另一个记录错误代码的地方。
    • @Noitidart 嗯,你也可以直接从苹果下载。您需要一个开发者帐户(但我相信免费的帐户仍然可以使用)。从这里可以访问所有不同版本的链接:developer.apple.com/support/xcode
    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2018-06-13
    • 2017-12-09
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多