【问题标题】:iOS Xcode Swift autocomplete broken?iOS Xcode Swift 自动完成功能坏了?
【发布时间】:2014-11-27 14:05:25
【问题描述】:

我使用 Swift 的次数不多,但我来自 Objective C,关于 Swift 的一些事情是让我印象深刻的 PITA。

在 iOS 编程中,我们有 animateWithDuration: 方法,它是 UIView 的一部分。

所以我尝试使用 Xcode 的自动完成功能并开始输入:

UIView.animateWith

自动完成显示:

UIView.animateWithDuration(duration: NSTimeInterval, animations: () -> Void)

然后我跳到“持续时间”字段,然后输入一个数字:

UIView.animateWithDuration(0.5, animations: () -> Void)

然后我再次切换到动画块,并像我通常在 Objective C 中那样按 Enter 键,Xcode 现在显示:

UIView.animateWithDuration(0.5, animations: { () -> Void in
    code
})

然后我最后一次用我的代码替换“代码”:

UIView.animateWithDuration(0.5, animations: { () -> Void in
    self.customView?.transform = CGAffineTransformMakeTranslation(0.0, 0.0);
})

那是 Xcode 给我错误的时候:

无法使用类型参数列表调用“animateWithDuration” '(FloatLiteralConvertible, 动画: () -> Void)'

我不明白。那是 Xcode 为我生成的自动完成代码,为什么它给我一个错误?

我注意到如果做一个简单的陈述,比如:

UIView.animateWithDuration(0.5, animations: { () -> Void in
    var num = 1 + 1;
})

它没有给我任何错误。

有什么想法吗?

【问题讨论】:

    标签: ios xcode swift autocomplete


    【解决方案1】:

    来自"Calling Methods Through Optional Chaining"

    任何通过可选链接设置属性的尝试都会返回一个 Void? 类型的值,它使您可以与 nil 进行比较以查看 如果属性设置成功...

    因此表达式的类型

    self.customView?.transform = CGAffineTransformMakeTranslation(0.0, 0.0)
    

    Void?(可选无效)。如果闭包只包含一个单个表达式, 那么这个表达式会自动作为返回值。 该错误消息非常具有误导性,但它来自于 Void? 是 不同于Void

    添加一个显式的return 语句可以解决问题:

    UIView.animateWithDuration(0.5, animations: { () -> Void in
        self.customView?.transform = CGAffineTransformMakeTranslation(0.0, 0.0)
        return
    })
    

    更新:添加一个明确的return 声明是不必要的 不再使用 Swift 1.2 (Xcode 6.3)。来自 Beta 版本说明:

    具有非 Void 返回类型的未注释单表达式闭包现在可以在 Void 上下文中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2016-08-04
      • 2016-07-10
      • 1970-01-01
      • 2014-11-24
      • 2014-11-14
      • 2016-11-16
      相关资源
      最近更新 更多