Vì vậy, trong Objective-C khi sử dụng Booleans nó có thể, và khuyến khích, để viết mã sử dụng khác không giá trị của một biến vì nó là giá trị boolean, có nghĩa là bạn có thể viết mã như thế này:Swift Boolean kiểm tra
if (someBool) {
// Stuff
}
Ngoài ra, có những lý do tại sao mã như sau không được khuyến khích:
if (someBool == YES) {
// Might run into problems here
}
những lý do tại sao việc kiểm tra một boolean chống boolean khác là tốt hơn giải thích here, nhưng ngắn gọn vấn đề chỉ là khi bạn đang so sánh bình đẳng để YES
hoặc NO
trực tiếp, bạn thực sự so sánh tương ứng với 1
và 0
. Vì Objective-C cho phép sử dụng các giá trị khác 0 như là một giá trị chân lý, bạn có thể kết thúc so sánh một cái gì đó cần được xem là true đối với YES
và có biểu thức giải quyết thành NO
, ví dụ:
int trueNumber = 2;
if (trueNumber == YES) {
// Doesn't run because trueNumber != 1
}
Đây có phải là sự cố trong Swift không? Các vấn đề về kiểu mã sang một bên, nếu tôi thấy một cái gì đó như sau
var someBool = true
if someBool == true {
// stuff
}
đó sẽ là một vấn đề hay nó không thực sự quan trọng? Những so sánh kiểu C này vẫn đang diễn ra dưới sự che chở hay liệu có cái gì đó được tích hợp vào Swift BooleanType để ngăn chặn những vấn đề này?
Được rồi, vậy lý do tại sao mã đó là một vấn đề trong Objective-C không phải là một vấn đề đơn giản chỉ vì kiểm tra kiểu nghiêm ngặt trong Swift? Nó có vẻ giống như để được sử dụng trong kiểm tra boolean trong Swift, một kiểu cơ bản phải trả về một 'Bool' đúng kiểu (như bạn đã thấy ở trên), để tránh vấn đề mà C và Objective-C có với' typedef đã ký char'. Nó đơn giản như thế sao? – Ziewvater
@Ziewvater Yup, đúng – Kametrixom