什么样的Swift型安全意味着什么呢?

时间:2016-12-08 14:58:12

标签: swift

这是在官方苹果网站上(快速教程) “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
}

问题: 这样做有什么安全或安全语言?请用例子说明..

2 个答案:

答案 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 { ... }。由于编译器不会抱怨,因此很难找到错误。