后代:这个问题是指 iOS8 Beta 4
我正在尝试获得一个NSData
充满 24 位颜色的实例。字节将是[r,g,b, r,g,b, ...]
每种颜色的 3 个字节,全部紧密地打包在一起。
问题是我需要一些Uint8
s 用作字节来填充我从 of 派生CGFloats
的UIColor
。而从CGFloat
to转换UInt8
让我很难过
'CGFloat' 不能转换为 'UInt8'
我读过这个问题:'CGFloat' is not convertible to 'UInt8' and other CGFloat issues with Swift and Xcode 6 beta 4
这是相同的错误消息,但我要收集的是并非所有数值都是相互之间的转换,我必须使用中间类型。但我不确定是哪个。
let lightCount: Int = 48
var colors: [UIColor] // inited by appending "lightCount" UIColor instances
func dataBlob() -> NSData {
var data = NSMutableData(capacity: lightCount*3)
for i in 0..<lightCount {
var r: CGFloat = 0
var g: CGFloat = 0
var b: CGFloat = 0
colors[i].getRed(&r, green: &g, blue: &b, alpha: nil)
data.appendBytes([
UInt8(r * 255.0),
// ^ ERROR: CGFloat is not convertible to UInt8
UInt8(g * 255.0),
UInt8(b * 255.0),
], length: 3);
}
return data
}
我尝试了一堆组合来转换为一些中间类型,例如Float
或Int
无济于事。
此外,我在这里的做法是否合理?有没有我错过的更简单的方法?