- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在使用 Swift 中的 CGImageAlphaInfo
和 CGBitmapInfo
执行按位运算时遇到问题。
特别是,我不知道如何移植这个 Objective-C 代码:
bitmapInfo &= ~kCGBitmapAlphaInfoMask;
bitmapInfo |= kCGImageAlphaNoneSkipFirst;
以下简单的 Swift 移植会在最后一行产生有点神秘的编译器错误 'CGBitmapInfo' is not identical to 'Bool'
:
bitmapInfo &= ~CGBitmapInfo.AlphaInfoMask
bitmapInfo |= CGImageAlphaInfo.NoneSkipFirst
查看源代码我注意到 CGBitmapInfo
被声明为 RawOptionSetType
而 CGImageAlphaInfo
不是。也许这与它有关?
按位运算符的官方文档没有涵盖枚举,这于事无补。
最佳答案
你有正确的等效 Swift 代码:
bitmapInfo &= ~CGBitmapInfo.AlphaInfoMask
bitmapInfo |= CGBitmapInfo(CGImageAlphaInfo.NoneSkipFirst.rawValue)
有点奇怪因为CGImageAlphaInfo
实际上不是位掩码——它只是一个 UInt32 enum
(或者用 C 语言来说,类型为 uint32_t
的 CF_ENUM/NS_ENUM),值为 0 到 7。
实际发生的是您的第一行清除了 bitmapInfo
的前五位,是位掩码(在 Swift 中又名 RawOptionSetType
),因为 CGBitmapInfo.AlphaInfoMask
是 31,即 0b11111。然后你的第二行坚持 CGImageAlphaInfo
的原始值枚举到那些清除的位中。
如果这能解释为什么没有真正的文档的话,我在其他任何地方都没有看到枚举和位掩码像这样组合。自 CGImageAlphaInfo
是一个枚举,它的值是互斥的。这没有任何意义:
bitmapInfo &= ~CGBitmapInfo.AlphaInfoMask
bitmapInfo |= CGBitmapInfo(CGImageAlphaInfo.NoneSkipFirst.rawValue)
bitmapInfo |= CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)
关于swift - CGBitmapInfo 和 CGImageAlphaInfo 的位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25773391/
我是一名优秀的程序员,十分优秀!