我从一个字典中解开两个值,在使用它们之前,我必须投射它们并测试正确的类型。这是我想出来的:
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 latitudeDouble = latitude as? Double,longitudeDouble = longitude as? Double {
    // do stuff here
}

这种语法不工作,所以我想知道是否有一个美丽的方式来做到这一点。

Swift 3的更新:

以下将在Swift 3中工作:

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

只要确保记住,如果尝试的可选绑定之一失败,if-let块中的代码将不会被执行。

Swift 1.2:

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

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

Swift 1.1和更早版本:

这是一个好消息 – 你可以完全做到这一点。在两个值的元组上的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")
}

更新:此版本的代码现在可以正常工作。

在Swift中的if语句中使用多个let-as的更多相关文章

  1. ios – MKMapView MKCircle呈现一个半径太大的圆

    我面临着MKCircle外表的奇怪行为.基本上我正试图用一个任意的中心绘制一个半径为8500km的圆.这是我的代码:我还有一个自定义双击手势处理程序,它会覆盖地图视图的标准处理程序,并允许通过双击地图视图来更改地图中心:结果很奇怪:您可能会注意到这两个半径之间存在显着差异:第二个半径比第一个半径大!发生了什么,如何使它们正确显示?

  2. xcode – 尝试在Pin上居中地图(MKMapView)

    苦苦寻找一种方法来使地图缩放并以注释引脚为中心.Pin下降,但地图加载海洋.代码如下.第2个问题,非常相关:在实现上述问题的答案后,我已经修改了我的代码.现在,我的坐标从前一个视图到我的MKMapView,所以我不必费心去做两次API调用,第二个是在MKMapView中.目前在我的ViewWillAppear中,我有以下内容,并且AGAIN遇到了一个问题,即视图不会居中并放大图钉:反馈非常感谢,因为我不知道还应该做些什么.引脚加载到正确的坐标上,只是没有居中/缩放…

  3. ios – Swift无法分配类型[CLLocationCoordinate2D]的不可变值

    有人可以解释为什么我收到错误“无法分配类型[CLLocationCoordinate2D]的不可变值”我会给出两个场景.我希望第二个工作的原因是因为我将处于循环中并且需要每次都将它传递给drawShape函数.此代码有效:此代码不起作用:我不明白为什么这不起作用.我甚至有println(coordinates)和println(coords),它给了我相同的输出.解决方法将参数传递给函数时,默认情

  4. ios – 如何在MKMapView中将引脚和贴图保持在移动叠加层的中心

    如何在地图上垂直移动另一个视图,使得引脚保持在覆盖图上方,如何将引脚置于地图中心.请参阅附加屏幕截图,了解第一个和最终状态.当用户平移上/下时,我已经获得了叠加层和屏幕顶部之间空间的CGRect.然而,当用户向上平移时,我如何使用它来移动地图和图钉同时放大地图……

  5. ios – 如何使用Swift使用Core Data更新/保存和保留非标准(可转换)属性?

    我已经构建了一个非常基本的示例来演示我尝试更新可转换类型并在应用程序重新启动之间保持更改的问题.我有一个Destination类型的实体……解决方法核心数据无法跟踪该对象的脏状态,因为它不了解其内部.而不是改变对象,创建一个副本,改变它,然后设置新对象.它可能会变异,然后重新设置相同的对象,不确定,没有测试它.您可以检查,只是改变地址,然后询问托管对象是否有更改,如果没有则则不会保存.

  6. swift 类和结构的初始化方法

    1.0Struct2.Class

  7. swift中Class的继承

  8. 结构体与 NSCoding

    我找到了一种优雅的方式来将结构体包在NSCoding的容器中,存储时也不会让人觉得小题大做。save包括了获取encoder,并将其存到某个路径中:fetch则包括了一些微小的编译器工作。现在,要使用这个cache,只需要实例化一个对象并指定其类型为Coordinate:生成了该对象之后,我们就可以透明地存取coordinate结构体了:使用以上方法,我们可以通过NSCoding来编码结构体,遵守单一职责原则,并加强了类型安全。

  9. 在Swift中的if语句中使用多个let-as

    我从一个字典中解开两个值,在使用它们之前,我必须投射它们并测试正确的类型。Swift3的更新:以下将在Swift3中工作:只要确保记住,如果尝试的可选绑定之一失败,if-let块中的代码将不会被执行。Swift1.2:苹果可能已经读过你的问题,因为你的希望代码在Swift1.2中正确编译:Swift1.1和更早版本:这是一个好消息–你可以完全做到这一点。在两个值的元组上的switch语句可以使用模式匹配同时将它们转换为Double:更新:此版本的代码现在可以正常工作。

  10. swift – 地图按钮刷新位置

    我正在开发我的第一个快速iPad应用程序.到目前为止,我有一个基本的mapview,底部工具栏中有一个按钮,我想刷新一次,并在点击后关注用户位置.目前我有这个代码:}如何获取刷新按钮?我真的需要一些帮助,因为我是Swift/xcode的新手:)谢谢正如@Orkhan所说,你可以这样做.如果你想做这个动作你只需简单地按住Ctrl键拖动到viewController并选择“Action”.之后,您可以将代码添加到处理程序.

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部