Um herauszufinden, was mit Int(false)
los ist, ändern Sie ihn auf:
Int.init(false)
und dann Option -Klick auf init
. Sie werden sehen, dass es diese initializer ruft:
init(_ number: NSNumber)
Seit false
ist ein gültiger NSNumber
und NSNumber
entspricht dem Protokoll ExpressibleByBooleanLiteral
, Swift findet diese initializer.
Warum also nicht diese Arbeit ?:
let emptyString = false
Int(emptyString)
Weil jetzt Sie übergeben eine Bool
eingegeben Variable und Int
keinen Initialisierer haben, die eine Bool
nimmt.
In Swift 2 hätte dies funktioniert, weil Bool
wurde automatisch überbrückt NSNumber
, aber das wurde entfernt.
Sie können es wie folgt erzwingen:
import Foundation // or import UIKit or import Cocoa
Int(emtpyString as NSNumber)
Dies funktioniert nur, wenn Stiftung importiert wird. In Pure Swift gibt es natürlich keine NSNumber
.
Dies ist nicht in swift 3. – Dili
Ich glaube nicht, dass es doppelt ist, ist die Frage "warum", nicht "wie". Der Titel der Frage sollte bearbeitet werden. –