这是在官方苹果网站上(快速教程) “Swift的类型安全性可以防止非布尔值替换Bool”
let i = 1
if i
{
// this example will not compile, and will report an error
}
let i = 1
if i == 1 {
// this example will compile successfully
}
问题: 这样做有什么安全或安全语言?请用例子说明..
答案 0 :(得分:2)
当Objective-C在80年代构思时,其设计者决定使ObjC成为C的严格超集,即任何有效的C代码在ObjC中也是有效的。那时的C没有布尔类型 - 除了0之外的任何东西都是真的。最重要的是,C中的赋值运算符也有一个返回值。以下各项均在C中有效:
int a, b;
a = (b = 2); // Now both a and b are 2
if (a) {
// What you are really testing for is a != 0
}
if (a = 4) {
// You just changed a to 4 and the true block will execute
// Perhaps what you really meant was to test for a == 4?
}
在设计Swift时,Apple决定废除这些模式。 if
语句必须检查布尔条件:
if a { } // invalid, you must test for a boolean condition
if a != 0 { } // ok
if (a = 4) { } // invalid, assignment does not return
if a == 4 { } // ok
答案 1 :(得分:-1)
在objective-c中,大于或小于0的int将被视为true,如果您要在该上下文中使用,则值为0的int将被视为false。
E.g。在objective-c
int i = 1;
if (i) {
// this would be executed
}
if (i == 1) {
// this would too be executed
}
如果你确切地知道自己在做什么,那么你就不会有任何问题,但想象一下你犯了错误并写下if i { ... }
。由于编译器不会抱怨,因此很难找到错误。