gpt4 book ai didi

iOS Xcode Swift 自动完成功能坏了?

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:33 24 4
gpt4 key购买 nike

我使用 Swift 的次数不多,但来自 Objective C,关于 Swift 的一些东西是让我头脑清醒的 PITA。

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

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

UIView.animateWith

自动完成显示:

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

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

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

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

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

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

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

那是 Xcode 然后给我错误的时候:

Cannot invoke 'animateWithDuration' with an argument list of type '(FloatLiteralConvertible, animations: () -> Void)'

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

我注意到如果做一个像这样的简单语句:

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

它没有给我任何错误。

有什么想法吗?

最佳答案

来自 "Calling Methods Through Optional Chaining" :

Any attempt to set a property through optional chaining returns a value of type Void?, which enables you to compare against nil to see if the property was set successfully ...

因此表达式的类型

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

Void?(可选 Void)。如果闭包仅包含一个单个表达式,然后这个表达式会自 Action 为返回值。错误消息非常具有误导性,但它来自于 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)。来自测试版发行说明:

Unannotated single-expression closures with non-Void return types can now be used in Void contexts.

关于iOS Xcode Swift 自动完成功能坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27172529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com