我正在从字典中解包两个值,在使用它们之前,我必须转换它们并测试正确的类型.这就是我想到的:

var latitude : AnyObject! = imageDictionary["latitude"]
var longitude : AnyObject! = imageDictionary["longitude"]

if let latitudeDouble = latitude as? Double  {
   if let longitudeDouble = longitude as? Double {
       // do stuff here
   }
}

但我想把两个if let查询合并成一个.所以它是这样的:

if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double {
    // do stuff here
}

这种语法不起作用,所以我想知道是否有一种漂亮的方法可以做到这一点.

推荐答案

Update for Swift 3:

以下内容将在Swift 3中使用:

if let latitudeDouble = latitude as? Double, let longitudeDouble = longitude as? Double {
    // latitudeDouble and longitudeDouble are non-optional in here
}

只要记住,如果try 的可选绑定之一失败,if-let块中的代码将不会执行.

注意:这些子句不一定都是"let"子句,可以用逗号分隔任何一系列布尔判断.

例如:

if let latitudeDouble = latitude as? Double, importantThing == true {
    // latitudeDouble is non-optional in here and importantThing is true
}

Swift 1.2:

苹果可能已经阅读了您的问题,因为您希望的代码在Swift 1.2(今天的测试版)中正确编译:

if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double {
    // do stuff here
}

Swift 1.1 and earlier:

好消息是,你完全可以做到这一点.两个值的元组上的switch语句可以使用模式匹配将两个值同时转换为Double:

var latitude: Any! = imageDictionary["latitude"]
var longitude: Any! = imageDictionary["longitude"]

switch (latitude, longitude) {
case let (lat as Double, long as Double):
    println("lat: \(lat), long: \(long)")
default:
    println("Couldn't understand latitude or longitude as Double")
}

Update:这个版本的代码现在可以正常工作了.

Swift相关问答推荐

如何使用swift宏生成一个带有关联值的枚举?

如何让CTFontCreateUIFontForLanguage与汉字和表情包协同工作?

如何将图像插入到矩形中

为SwiftUI文本视图提供固定宽度,并仅在文本换行时使文本视图底部增大

为什么ClosedRange<;Int&>包含的速度比预期慢340万倍?

仅当单击UIButton时才调用计时器函数

不能将符合协议的SWIFT类的实例分配给需要该协议的Objective-C属性

在表单中对齐文本框

SwiftUI如何能够在Text中使用字符串字面量来创建LocalizedStringKey?

NavigationStack 和 TabView - 工具栏和标题不显示

从 actor 的 init 方法调用方法

UIButton 配置不更新按钮标题

iOS16 Bug 键盘在表单解雇 SwiftUI 时打破布局

如何在 RxSwift 中获取 controlEvent 类型?

如何删除桥头而不出错?

Swift 覆盖实例变量

快速在 LLDB 中使用 po

如何使用 swift 在 tableview 中填充两个不同数组的两个部分?

如何快速显示数组的所有元素?

如何在 iOS 上的 Swift 中获取 sharedApplication?