因此,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
为什么?
我没有充分的理由,我只是在试验这门语言.
编辑:现在可以在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
幸运的是,你可以在Swift 2中使用if case
:
if case .Address(let addressString) = address { // do something with addressString }