The code shown below:
Int(false) // = 1, it's okay
//but when I try this
let emptyString = true //or let emptyString : Bool = true
Int(emptyString) //error - Cannot invoke initializer with an argument list of type '(Bool)'
To find out what is going on with
Int(false), change it to:
and then option-click on
init. You will see that it is calling this initializer:
init(_ number: NSNumber)
false is a valid
NSNumber conforms to the protocol
ExpressibleByBooleanLiteral, Swift finds this initializer.
So why doesn't this work?:
let emptyString = false Int(emptyString)
Because now you are passing a
Bool typed variable and
Int doesn't have an initializer that takes a
In Swift 2 this would have worked because
Bool was automatically bridged to
NSNumber, but that has been removed.
You can force it like this:
import Foundation // or import UIKit or import Cocoa Int(emtpyString as NSNumber)
This only works if Foundation is imported. In Pure Swift there is no
NSNumber, of course.