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

时间:2019-06-11 02:36:26

标签: swift

对于切换情况下的execution(void de.scrum_master.app.AnnotatedClass.doSomething()) execution(void de.scrum_master.app.AnnotatedClass.doSomethingElse()) execution(void de.scrum_master.app.AnnotatedMethod.doSomething()) execution(void de.scrum_master.app.AnnotatedMixed.doSomething()) execution(void de.scrum_master.app.AnnotatedMixed.doSomethingElse()) ,我有点怀疑,这是一个简单的代码,哪个更好?

let position

3 个答案:

答案 0 :(得分:5)

enum

let指定enum Result值时使用此语法。在这种情况下,case success指定Int还将包含code的{​​{1}}值。

在switch语句中let之后立即使用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")
}

答案 1 :(得分:3)

The Swift Programming Language: Enumeration: Associated Values说:

  

您可以使用switch语句检查不同的条形码类型,类似于Matching Enumeration Values with a Switch Statement中的示例。但是,这次,关联值被提取为switch语句的一部分。您可以将每个关联的值提取为常量(带有let前缀)或变量(带有var前缀),以便在switch案例的正文中使用:

switch productBarcode {
case .upc(let numberSystem, let manufacturer, let product, let check):
    print("UPC: \(numberSystem), \(manufacturer), \(product), \(check).")
case .qrCode(let productCode):
    print("QR code: \(productCode).")
}
// Prints "QR code: ABCDEFGHIJKLMNOP."
     

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

switch productBarcode {
case let .upc(numberSystem, manufacturer, product, check):
    print("UPC : \(numberSystem), \(manufacturer), \(product), \(check).")
case let .qrCode(productCode):
    print("QR code: \(productCode).")
}
// Prints "QR code: ABCDEFGHIJKLMNOP."

简而言之,它们是等效的,当您提取多个相关值时,后者是一个有用的速记。

答案 2 :(得分:1)

case .success(let code):// first
case let .success(code)://second

在您显示的示例中,没有区别。两者都是合法的,并且都做同样的事情。在这种情况下,它们是等效的模式。