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
cause
Bool
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转换为数字。