Dan Beaulieu Dan Beaulieu - 5 months ago 130
Swift Question

Whats the Swift 3 animateWithDuration syntax?

I'm porting an older app over to Xcode 7 beta and I'm getting an error on my animations:


Cannot invoke 'animateWithDuration' with an argument list of type
'(Double, delay: Double, options: nil, animations: () -> _,
completion: nil)'


Here's the code:

UIView.animateWithDuration(0.5, delay: 0.3, options: nil, animations: {
self.username.center.x += self.view.bounds.width
}, completion: nil)


This works in Xcode 6 so I'm assuming this is an update in Swift. So my question is:

What's the Swift 3 syntax for animateWithDuration?

Answer

Swift 3 Syntax

Here's an update with the Swift 3 Syntax:

UIView.animate(withDuration: 0.5, delay: 0.3, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    self.username.center.x += self.view.bounds.width
}, completion: nil)

Old Answer:

It turns out it's a very simple fix, just change options: nil to options: [].

Swift 2.2 Syntax:

UIView.animateWithDuration(0.5, delay: 0.3, options: [], animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)

What changed?

Swift 2 got rid of the C-Style comma delimited list of options in favor of option sets (see: OptionSetType). In my original question I passed in nil for my options, which was valid prior to Swift 2. With the updated syntax, we now see an empty option list as an empty set: [].

An example of animateWithDuration with some options would be this:

 UIView.animateWithDuration(0.5, delay: 0.3, options: [.Repeat, .CurveEaseOut, .Autoreverse], animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)
Comments