Ios 如何将bool转换为NSData
我发现要将Ios 如何将bool转换为NSData,ios,swift,nsdata,nskeyedunarchiver,Ios,Swift,Nsdata,Nskeyedunarchiver,我发现要将Int转换为NSData 它说要做到这一点: var foo: Int = 1000 let data = NSData(bytes: &foo, length: sizeof(Int)) 我想知道,对于将Bool转换为NSData,我是否也应该这样想: var purchase: Bool = true let data = NSData(bytes: &purchase, length: sizeof(Bool)) 就我而言,我总是知道Bool是真的。既然如
Int
转换为NSData
它说要做到这一点:
var foo: Int = 1000
let data = NSData(bytes: &foo, length: sizeof(Int))
我想知道,对于将Bool
转换为NSData
,我是否也应该这样想:
var purchase: Bool = true
let data = NSData(bytes: &purchase, length: sizeof(Bool))
就我而言,我总是知道Bool
是真的。既然如此,我想知道是否有更简单的方法将值“true”转换为NSData
对象
一些背景背景:
我将此NSData
值存储在带有的钥匙链中
我还将使用
NSKeyedUnarchiver.unarchiveObjectWithData
将NSData
值转换回bool。您可以尝试使用返回NSData的函数扩展bool
(我现在没有IDE,因此语法可能不正确)
然后,任何bool都会有这样的NSData表示
let b: Bool = true
let data: NSData = b.toNSData()
我在这方面还是新手,但我认为以上是苹果鼓励的“面向协议的编程”的一部分 Swift 4解决方案
if let isBool = value as? Bool
{
var valueInInt = Int(NSNumber(value: isBool)) //Convert Bool to Int
let data = Data(bytes: &valueInInt, count: MemoryLayout.size(ofValue: valueInInt) //Int to Data
}
Swift>=4个解决方案
if let isBool = value as? Bool
{
var valueInInt = Int(NSNumber(value: isBool)) //Convert Bool to Int
let data = Data(bytes: &valueInInt, count: MemoryLayout.size(ofValue: valueInInt) //Int to Data
}
我们可以使用jsonecoder
causeBool
struct
确认Codable
Typealias
let mBoolValue = true
let boolData = try! JSONEncoder().encode(mBoolValue)
尝试将bool转换为int,然后将其转换为NSDataI。我会将bool转换为一个字节,而不是int。然后只需执行一个
NSData setBytes
。因为Bool是有符号字符,而char是字节,所以没有转换。。。只需将其转换为一个字节。NSNumber(booleanLiteral:purchase)
可以将boo转换为数字。