在开头或()中在切换情况下使用`let`时有什么区别

张浩杰*_*张浩杰 9 swift

我对let positionin切换的情况有点怀疑,这是一个简单的代码,哪个更好

enum Result{
    case success(code:Int)
    case fail(err:NSError)
}

var result = Result.success(code: 3)

switch result {
case  .success(let code):// first
case let .success(code)://second
    print("success",code)
default:
    print("fail")
}
Run Code Online (Sandbox Code Playgroud)

Mal*_*lik 5

case .success(let code):

enum指定let值时使用此语法。在这种情况下,enum Result指定case success还将包含的Intcode

在switch语句中使用letright after case通常与where子句结合使用,以允许在switch语句中使用更复杂的case值。这样的一个例子如下

var text = "Hello"
var greetings = ["Hello", "Good Bye"]

switch text {
case let value where greetings.contains(value):
    print("Yes")
default:
    print("No")
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 5

正如Swift 编程语言:枚举:关联值所说:

\n\n
\n

您可以使用语句检查不同的条形码类型switch,类似于使用 Switch 语句匹配枚举值中的示例。然而,这一次,关联的值被提取为 switch 语句的一部分。您将每个关联值提取为常量(带有let前缀)或变量(带有前缀),以便在case\xe2\x80\x99s 主体var中使用:switch

\n\n
switch productBarcode {\ncase .upc(let numberSystem, let manufacturer, let product, let check):\n    print("UPC: \\(numberSystem), \\(manufacturer), \\(product), \\(check).")\ncase .qrCode(let productCode):\n    print("QR code: \\(productCode).")\n}\n// Prints "QR code: ABCDEFGHIJKLMNOP."\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果枚举案例的所有关联值都提取为常量,或者如果所有值都提取为变量,则为了简洁起见,您可以在案例名称之前放置单个var或注释:let

\n\n
switch productBarcode {\ncase let .upc(numberSystem, manufacturer, product, check):\n    print("UPC : \\(numberSystem), \\(manufacturer), \\(product), \\(check).")\ncase let .qrCode(productCode):\n    print("QR code: \\(productCode).")\n}\n// Prints "QR code: ABCDEFGHIJKLMNOP."\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

简而言之,它们\xe2\x80\x99 是等效的,当您提取多个关联值时,后者是一种有用的简写。

\n