2016-07-21 13 views
0

Я нашел this post для преобразования Int в NSDataКак преобразовать Ьоо в 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 обратно в BOOL с NSKeyedUnarchiver.unarchiveObjectWithData

+0

попробуйте преобразовать bool в int, а затем преобразовать его в NSData –

+0

Я бы преобразовал Bool в байт, а не в int. Затем просто сделайте 'NSData setBytes'. Поскольку Bool является символом, подписанным, а char - байтом, конверсии нет ... Просто добавьте его в байт. – Putz1103

+0

'NSNumber (booleanLiteral: purchase)' может конвертировать boo в число. – Khundragpan

ответ

0

Вы можете попробовать расширение Bool с функцией, которая возвращает NSData

(я не имею мой 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() 

Я все еще новичок в этом, но я думаю, что это часть «протокола, ориентированного на программирование», которое поощряет яблоко.

 Смежные вопросы

  • Нет связанных вопросов^_^