1

我发现这篇文章将 a 转换IntNSData

它说这样做:

var foo: Int = 1000
let data = NSData(bytes: &foo, length: sizeof(Int))

我想知道,对于将 a 转换为Bool,我是否应该这样做NSData,如下所示:

 var purchase: Bool = true
 let data = NSData(bytes: &purchase, length: sizeof(Bool))

就我而言,我总是知道这Bool将是真实的。既然是这种情况,我想知道是否有更简单的方法可以将值“true”转换为NSData对象。

一些背景背景:

我将此值与此库NSData一起存储在钥匙串中。

我也将NSData值转换回布尔值NSKeyedUnarchiver.unarchiveObjectWithData

4

3 回答 3

2

斯威夫特 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
}
于 2018-05-22T09:26:39.093 回答
1

斯威夫特 >= 4 解决方案

JSONEncoder我们可以很容易地使用原因Bool struct确认来实现这一点Codable Typealias

let mBoolValue = true
let boolData = try! JSONEncoder().encode(mBoolValue)
于 2020-04-07T13:11:47.953 回答
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()

我在这方面还是新手,但我认为以上是苹果鼓励的“面向协议编程”的一部分。

于 2016-07-21T16:59:05.463 回答