代码之家  ›  专栏  ›  技术社区  ›  Benjamin

导游中Swift枚举示例的混淆

  •  -2
  • Benjamin  · 技术社区  · 2 年前

    GuideTour

    enum ServerResponse {
        case result(String, String)
        case failure(String)
    }
    
    let success = ServerResponse.result("6:00 am", "8:09 pm")
    let failure = ServerResponse.failure("Out of cheese.")
    
    switch success {
    case let .result(sunrise, sunset):
        print("Sunrise is at \(sunrise) and sunset is at \(sunset).")
    case let .failure(message):
        print("Failure...  \(message)")
    }
    // Prints "Sunrise is at 6:00 am and sunset is at 8:09 pm."
    

    非常令人困惑。

    因为从示例代码中,我认为变量, success ServerResponse.result("6:00 am", "8:09 pm") .

    并使用 switch

    2 回复  |  直到 2 年前
        1
  •  4
  •   vacawama    2 年前

    对这个例子令人困惑。他们正在演示如何 switch 可用于提取 enum .

    enum ServerResponse {
        case success(String, String)
        case failure(String)
    }
    
    let success = ServerResponse.success("6:00 am", "8:09 pm")
    let failure = ServerResponse.failure("Out of cheese.")
    
    let result = Bool.random() ? success : failure
    
    switch result {
    case let .success(sunrise, sunset):
        print("Sunrise is at \(sunrise) and sunset is at \(sunset).")
    case let .failure(message):
        print("Failure...  \(message)")
    }
    

    然后每次运行代码时,您可能会得到 .success .failure 后果在任何一种情况下 转换 枚举 值并使用它们进行打印。


    除了使用 ,提取枚举关联值的另一种方法是 case let :

    if case let .success(sunrise, sunset) = result {
        print("Sunrise is at \(sunrise) and sunset is at \(sunset).")
    }
    

    这行表示如果 result 图案 .success(sunrise, sunset) ,然后 print

        2
  •  0
  •   Mateusz    2 年前

    成功 ,你会看到它是 服务器响应 服务器响应 枚举。

    以上代码可以编写

    let success: ServerResponse = .result("6:00 am", "8:09 pm")
    let failure: ServerResponse = .failure("Out of cheese.")
    
    switch success {
    case let .result(sunrise, sunset):
        print("Sunrise is at \(sunrise) and sunset is at \(sunset).")
    case let .failure(message):
        print("Failure...  \(message)")
    }