【问题标题】:Why does this Switch statement require parenthesis for 'Switch Value' and 'Compound case'?为什么这个 Switch 语句需要为“Switch Value”和“Compound case”加上括号?
【发布时间】:2018-08-01 00:06:29
【问题描述】:

我对 Swift 还很陌生,所以仍在修补和寻找解决方法。我只是想知道为什么我必须将 Switch 值 chicken.breed, chicken.temper 和复合大小写 Breed.leghorn, Temper.hilarious 括在括号中。 当我删除括号时,请参阅下面的错误

上下文 练习的目标是每当找到与我想要检查的BreedTemper 值匹配的有趣鸡时增加chickenOfInterestCount。所以我使用了一个 Switch 语句来执行这些

Exercise.swift

var chickenOfInterestCount = 0

for chicken in chickens {

    // check the chicken variables breed and temper enums
    switch (chicken.breed, chicken.temper){
        case (Breed.leghorn, Temper.hilarious):
            chickenOfInterestCount += 1
        default:
            print("No match")
    }
}

print(chickenOfInterestCount)

Chicken.swift

public enum Breed {
    case leghorn, rhodeIsland, silkie, plymouthRock
}

public enum Temper {
    case friendly, grumpy, hilarious
}

public struct Chicken {
    public let breed: Breed
    public let temper: Temper
}


public let chickens: [Chicken] = [
    Chicken(breed: .leghorn, temper: .friendly),
    Chicken(breed: .leghorn, temper: .friendly),
    Chicken(breed: .leghorn, temper: .grumpy),
    Chicken(breed: .rhodeIsland, temper: .friendly),
    Chicken(breed: .leghorn, temper: .hilarious),
    Chicken(breed: .rhodeIsland, temper: .friendly),
    Chicken(breed: .rhodeIsland, temper: .grumpy),
    Chicken(breed: .silkie, temper: .friendly),
    Chicken(breed: .rhodeIsland, temper: .grumpy),
    Chicken(breed: .silkie, temper: .grumpy),
    Chicken(breed: .rhodeIsland, temper: .hilarious),
    Chicken(breed: .leghorn, temper: .friendly),
    Chicken(breed: .silkie, temper: .friendly),
    Chicken(breed: .leghorn, temper: .hilarious),
    Chicken(breed: .plymouthRock, temper: .grumpy),
    Chicken(breed: .leghorn, temper: .grumpy),
    Chicken(breed: .silkie, temper: .grumpy),
    Chicken(breed: .plymouthRock, temper: .friendly),
    Chicken(breed: .leghorn, temper: .friendly),
    Chicken(breed: .leghorn, temper: .friendly),
] 

删除括号时出错

error: 19_EnumsAndSwitch.playground:9:25: error: expected '{' after 'switch' subject expression
    switch chicken.breed, chicken.temper{
                        ^

error: 19_EnumsAndSwitch.playground:10:9: error: 'case' label can only appear inside a 'switch' statement
        case (Breed.leghorn, Temper.hilarious):
        ^

error: 19_EnumsAndSwitch.playground:12:9: error: 'default' label can only appear inside a 'switch' statement
        default:
        ^

【问题讨论】:

    标签: swift enums switch-statement structure


    【解决方案1】:

    switch 采用一个表达式。通过将两个值放在括号中,您正在创建一个元组,并且 case 语句在元组上匹配。

    如果没有括号,您试图将两个逗号分隔的表达式放在只能有一个的地方。

    当您在元组上使用 switch 时,案例允许您将元组的各种组合与 switch 表达式中的组合进行匹配。

    有关这方面的更多信息,请参阅 Swift 手册中的 Tuples and Switch 部分。

    【讨论】:

    • 干杯。本质上我可以存储我的初始开关值以测试一个常数?在我学习的早期我不知道Tuple
    猜你喜欢
    • 2022-01-20
    • 2018-05-05
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多