Swift 3/Xcode 8 change: changes with string interpolation and implicitly unwrapped optionals

All,

I was working on converting my application from Swift 2.2 to Swift 3.

One of the things I noticed is that the following situation seems to have changed:

In Xcode 7 I have some Swift with the following pattern: I have a string property at the top of the file where it is declared as a implicitly unwrapped optional string.

Note: This is a playground example, however in my code I use this in a view controller where I know the string will be set in code, but I don’t want to set it in the required required init?(coder aDecoder: NSCoder))

As you can see when the string is interpolated and then printed it unwraps the implicitly unwrapped optional. This has been the case since early Swift and the current Xcode.

import UIKit

var str : String!
var str2 : String!

str = "Hello, playground"
str2 = "Text = \(str)” //prints “Text = Hello, playground"

However this same code in Xcode 8 with Swift 3 shows Optional(“Hello, Playground”) unless I unwrap it again.

import UIKit

var str : String!
var str2 : String!

str = "Hello, playground"
str2 = "Text = \(str)” //prints “Text = Optional(“Hello, playground”)"
str2 = "Text = \(str!)” //prints “Text = Hello, playground"

Does anyone know why I have to unwrap the variable again during interpolation in Xcode 8 with Swift 3? Is this is a possible Xcode 8 bug (I can file a radar if it is) or a known change in Swift 3?

Thanks!

Joshua Hudson
Washington State Department Of Transportation - Mobile Application Developer Lead

Does anyone know why I have to unwrap the variable again during interpolation in Xcode 8 with Swift 3? Is this is a possible Xcode 8 bug (I can file a radar if it is) or a known change in Swift 3?

Best regards,
Rimantas

Perfect!

Thanks Rimantas.

I’ll change code as needed.

Thanks!

Josh

···

On Jul 20, 2016, at 1:08 PM, Rimantas Liubertas <rimantas@gmail.com> wrote:

Does anyone know why I have to unwrap the variable again during interpolation in Xcode 8 with Swift 3? Is this is a possible Xcode 8 bug (I can file a radar if it is) or a known change in Swift 3?

https://github.com/apple/swift-evolution/blob/master/proposals/0054-abolish-iuo.md

Best regards,
Rimantas