如何将bool转换为NSData

时间:2016-07-21 16:45:19

标签: ios swift nsdata nskeyedunarchiver

我找到this postInt转换为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值存储在钥匙串中this library

我还要将NSData值转换为带有NSKeyedUnarchiver.unarchiveObjectWithData的布尔值

3 个答案:

答案 0 :(得分:2)

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
}

答案 1 :(得分:0)

您可以尝试使用返回NSData的函数扩展Bool

(我现在没有让我的IDE,所以语法可能不对)

extension Bool {
  func toNSData() -> NSData {
    var data: NSData?
    if ( self.value ) { //not sure if this is the right syntax
      return NSData(bytes: 1, length: sizeof(Int))
    }
    return NSData(bytes: 0, lentgh: sizeOf(Int))
  }
}

然后任何bool都会有这样的NSData表示

let b: Bool = true
let data: NSData = b.toNSData()

我还是新手,但我认为以上是#34;面向协议编程的一部分"苹果鼓励。

答案 2 :(得分:0)

迅速> = 4解决方案

我们可以使用JSONEncoder轻松地实现这一点,原因是Bool struct确认Codable Typealias

let mBoolValue = true
let boolData = try! JSONEncoder().encode(mBoolValue)