Một NSNumber chứa một Bool có thể dễ dàng bị nhầm lẫn với các loại khác có thể được bọc trong lớp NSNumber:Có cách nào đúng để xác định rằng một NSNumber có nguồn gốc từ một Bool sử dụng Swift không?
NSNumber(bool:true).boolValue // true
NSNumber(integer: 1).boolValue // true
NSNumber(integer: 1) as? Bool // true
NSNumber(bool:true) as? Int // 1
NSNumber(bool:true).isEqualToNumber(1) // true
NSNumber(integer: 1).isEqualToNumber(true) // true
Tuy nhiên, thông tin về loại ban đầu của nó được giữ lại, như chúng ta có thể thấy ở đây:
NSNumber(bool:true).objCType.memory == 99 // true
NSNumber(bool:true).dynamicType.className() == "__NSCFBoolean" // true
NSNumber(bool:true).isEqualToValue(true) || NSNumber(bool:true).isEqualToValue(false) //true
Câu hỏi đặt ra là: phương pháp nào trong số những cách tiếp cận này là cách tiếp cận tốt nhất (và/hoặc an toàn nhất) để xác định khi nào một Bool được bọc trong một NSNumber chứ không phải cái gì khác? Tất cả đều hợp lệ không? Hoặc, là có một giải pháp tốt hơn?
Tôi đã đánh dấu câu trả lời này là câu trả lời đúng vì bạn đã cung cấp giải pháp làm việc. Vì nó không có trong Swift, tôi đã chỉnh sửa câu trả lời của bạn để bao gồm mã Swift (chỉ cần đợi xem xét ngang hàng của bản chỉnh sửa đó). Cảm ơn. – sketchyTech
@GoodbyeStackOverflow - đã phê duyệt bản dịch của bạn cho bạn. – CRD
Tuyệt vời, cảm ơn một lần nữa. – sketchyTech