iOS Xcode Swift 自动完成功能坏了?
Posted
技术标签:
【中文标题】iOS Xcode Swift 自动完成功能坏了?【英文标题】:iOS Xcode Swift autocomplete broken? 【发布时间】: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;
)
它没有给我任何错误。
有什么想法吗?
【问题讨论】:
【参考方案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 上下文中使用。
【讨论】:
以上是关于iOS Xcode Swift 自动完成功能坏了?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 swift 将 google 地方自动完成功能添加到 xcode(教程)
Xcode 自动完成功能在 Swift 游乐场的 Sources 文件夹中不起作用
Xcode 6.1 if/else/for/switch 语句不自动完成(仅限 Swift)