在Swift中打开Switch外部的Enum元组

 skysky001 发布于 2023-01-11 18:50

因此,Swift中一个很酷的新功能是更先进enum的,并且可以关联更复杂的数据.例如,我可以这样做:

enum Location {
    case GeoPoint(latitude: Double, longitude: Double)
    case Address(address: String)
}

var address = Location.Address(address: "1234 Fake St, Fakesville TN, 41525")
var geoPoint = Location.GeoPoint(latitude: 42.342, longitude: -32.998)

// address or geoPoint
switch address {
case .Address(let addressStr):
    // Unwrapped value as 'addressStr'
    println("Address: \(addressStr)")
case .GeoPoint(let latitude, let longitude):
    // Unwrapped values as 'latitude' and 'longitude'
    println("lat: \(latitude) long: \(longitude)")
}

是否有可能在switch声明之外解开这些内在价值?就像是:

var addressStr = address.0

为什么?

我没有充分的理由,我只是在试验这门语言.

2 个回答
  • 编辑:现在可以在Swift 2+中使用/sf/ask/17360801/


    我不认为这是可能的,因为枚举变量不能保证是那些内部值的情况.您可以添加一个计算属性,为您解包它:

    enum Location {
    
        var address: String? {
        get {
            switch self {
            case .Address(let address)
                return address
            default:
                return nil
            }
        }
        }
    
        case GeoPoint(latitude: Double, longitude: Double)
        case Address(address: String)
    }
    

    然后你可以这样做:

    var addressStr = address.address
    

    2023-01-11 18:51 回答
  • 幸运的是,你可以在Swift 2中使用if case:

    if case .Address(let addressString) = address {
        // do something with addressString
    }
    

    2023-01-11 18:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有