因此,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)")
}
Run Code Online (Sandbox Code Playgroud)
是否有可能在switch声明之外解开这些内在价值?就像是:
var addressStr = address.0
Run Code Online (Sandbox Code Playgroud)
为什么?
我没有充分的理由,我只是在试验这门语言.
Qby*_*yte 17
幸运的是,你可以在Swift 2中使用if case:
if case .Address(let addressString) = address {
// do something with addressString
}
Run Code Online (Sandbox Code Playgroud)
Aus*_*tin 14
编辑:现在可以在Swift 2+中使用/sf/answers/2189071601/
我不认为这是可能的,因为枚举变量不能保证是那些内部值的情况.您可以添加一个计算属性,为您解包它:
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)
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
var addressStr = address.address
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3503 次 |
| 最近记录: |