我找到this post将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
值存储在钥匙串中this library。
我还要将NSData
值转换为带有NSKeyedUnarchiver.unarchiveObjectWithData
的布尔值
答案 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)