我在Xcode中创建了一个Swift应用程序,它向BLE适配器发送一个命令,以便使连接到它的LED变为不同的颜色。
正如我在对SO的前一篇文章的回复中建立的那样,我必须以数组中的十六进制整数发送命令。我使用以下代码来执行此操作:
let bytes : [UInt8] = [ 0x52, 0x13, 0x00, 0x56, 0xFF, 0x00, 0x00, 0x00, 0xAA ]
let data = NSData(bytes: bytes, length: bytes.count)
因此,这需要如上所述的UInt8表单。
但是,我试图在我的Swift应用程序上使用滑块作为颜色选择器,以便设置连接到BLE接收器的LED灯条的R,G和B颜色。为了做到这一点,我分别为R,G和B创建了三个滑块,将每个滑块的最小值设置为0,最大值设置为255(因为255转换为十六进制的FF)。我然后使用以下函数将这些转换为十六进制形式,以便我在上面的命令中实现。
func colorToHex(input: Int) -> UInt8 {
var st = NSString(format: "%2X", input)
return st
}
这个问题是我必须再次返回一个UInt8值。因为' st'是一个NSString,Xcode抛出的错误是NSString不能转换为UInt8'。
我对Swift相当新鲜。这里的问题是,如何让函数返回UInt8值,如何使其形成UInt8值?
非常感谢任何帮助!
答案 0 :(得分:1)
只是
func colorToHex(input: Int) -> UInt8 {
return UInt8(input % (Int(UInt8.max) + 1))
}
NSString(format: "%2X", colorToHex(25)) // "19"
NSString(format: "%2X", colorToHex(254)) // "FE"
NSString(format: "%2X", colorToHex(255)) // "FF"
NSString(format: "%2X", colorToHex(256)) // "0"
如果我是你,我将使用NSString(格式:“%0x”,colorToHex(25))//“19” 在您的情况下,如果数字有一个符号,则您有空格
答案 1 :(得分:1)
无需使用NSString
或Int
。如果redSlider
是您的UISlider
,其最小值为0,最大值为255,那么您只需计算
let redByte = UInt8(redSlider.value)
并在bytes
数组中使用它:
var bytes : [UInt8] = [ 0x52, 0x13, 0x00, 0x56, 0xFF, 0x00, 0x00, 0x00, 0xAA ]
bytes[0] = redByte // Assuming that the first array element is for red.