对于我的蓝牙通信,我需要一个字节数组的校验码/校验和。 蓝牙通信协议说:"校验码的指令:校验码=(0 - 期望整个字节的字节总和)"
在this post的帮助下,我已经在swift中找到了一种工作方法:
var checksum: UInt8 {
let cs: Int = self.map { Int($0) }.reduce(0, +) & 0xff
if cs >= 1 && cs <= 255 {
return UInt8( 256 - cs )
} else {
return UInt8(1)
}
}
我必须承认,我正在从字节数组中解决校验和的整个概念,而且我不能用Java工作。
我遇到了java.util.stream类的方法,但该类要求api级别为24或更高,并且我希望使用23作为最小值,因为它仍然被广泛使用。
答案 0 :(得分:0)
它看起来不是很好而且很流畅,但我确实有效:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// On inputing value to textfield
if ((textField.text?.characters.count)! < 1 && string.characters.count > 0 ){
let nextTag = textField.tag + 1
// get next responder
var nextResponder = textField.superview?.viewWithTag(nextTag)
if (nextResponder == nil){
nextResponder = textField.superview?.viewWithTag(1)
}
textField.text = string;
//resign at 4th textfield
if textField.tag == 4{
txt4.resignFirstResponder()
}else{
nextResponder?.becomeFirstResponder()
}
return false
}
}