Objective-C和Sprite Kit游戏开发从入门到精通
上QQ阅读APP看书,第一时间看更新

3.2 条件语句

判断代码执行的逻辑时,条件的设定是非常重要的,比如,不是友机并不意味着要摧毁,但如果是敌机,则摧毁是必需的,所以,我们可以快速地判断它是不是敌机,而不是判断是否为友机。

在Objective-C代码中,对于条件的判断,可以有两种方法:

❑ 使用if语句结构。

❑ 使用?:运算符。

■3.2.1 if语句

if语句的基本应用格式如下。

    if (<条件>) {
        <语句块>
    }

当<条件>成立(YES),就执行<语句块>,然后执行}后面的代码。如果<条件>不成立(NO),就直接执行}后面的代码。

如下面的代码,如果是敌人,就开火摧毁。

    BOOL isEnemy = YES;
    if (isEnemy) {
        NSLog(@"开火并摧毁");
    }

如果不是敌机怎么办呢?我们可以添加else语句,如下面的代码。

    BOOL isEnemy = NO;
    if (isEnemy) {
        NSLog(@"开火并摧毁");
    } else {
        NSLog(@"不是敌机,允许登舰");
    }

更复杂的情况下,会有多个条件,可以在结构中添加else if语句,如下面的代码。

    if (<条件1>) {
        <语句块1>
    }else if (<条件2>) {
        <语句块2>
    }else if (<条件n>) {
        <语句块n>
    }else {
        <语句块n+1>
    }

在这种if语句结构中,else if可以有多个,也可以没有,每一个条件都对应了一个需要执行的语句块。else语句只能放在所有条件的后面,而且只能有一个,当所有条件都不满足时,会执行<语句块n+1>。

此外,对于条件的判断还可以嵌套使用,如下面的代码。

    BOOL isEnemy = NO;
    NSInteger tarmacNumber = 10;
    if (isEnemy) {
        NSLog(@"开火并摧毁");
    } else {
        if (tarmacNumber > 0){
            NSLog(@"请在 %li号专用停机坪降落", tarmacNumber);
        } else {
            NSLog(@"请在公共停机坪降落");
        }
    }

下面的代码,演示了如何使用复合条件判断一个年份是否为闰年。

    int year = 2016;
    if ((year % 100 ! = 0 && year % 4 == 0) || year % 400 == 0)
    {
        NSLog(@"%i年是闰年", year);
    } else {
        NSLog(@"%i年不是闰年", year);
    }

如果大家在工作中需要更多关于日期的操作,第9章会讨论相关内容。

■3.2.2 ? :运算符

对于简单的if-else语句结构,我们可以使用?:运算符代替,它是唯一的一种三元运算符,需要三个表达式参加运算,其应用格式如下。

    <表达式1> ? <表达式2> : <表达式3>

其中,<表达式1>为逻辑表达式,其结果应该是BOOL类型,当其值为YES时,整个表达式的运算结果就是<表达式2>的值。如果<表达式1>的值为NO,整个表达式的运算结果就是<表达式3>的值。如下面的代码。

    BOOL isEnemy = NO;
    isEnemy ? NSLog(@"开火并摧毁") : NSLog(@"不是敌机,允许登舰");

请注意,如果表达式的代码稍微有一点点复杂,可以使用小括号()将三个表达式分别包装一下。