Pour clarifier la confusion quant à la nature de l'erreur,
Le numéro NSN appelle NSNumber.init( value: X )
pour instancier un objet NSNumber.
"Étiquettes d'arguments (_:)
ne correspondent à aucune surcharge disponible".
Le code produit l'erreur car NSNumber n'est pas un type mais une classe avec des membres. "NSNumber(...)"
instancie un objet de classe qui contient l'élément ' valeur de (1.0 / 1.29)
.
Il ne s'agit pas d'une conversion de type ou d'un cast comme en C/C++. où vous essayez de moulage le type pour permettre au compilateur de faire son travail.
float y = 1.3;
int x = int( y );
NSNumber n'est pas un type comme int, float, char
L'erreur entre en jeu car il existe plusieurs façons d'appeler NSNumber.init( value: type )
Swift exige que vous indiquiez spécifiquement que vous souhaitez que le membre " value " du NSNumber contienne la valeur x.
let localRate = NSNumber( 1.0 / 1.29)
var y = NSNumber( 0 )
var b = NSNumber( false )
let localRate = NSNumber(value: 1.0 / 1.29)
var y = NSNumber( value: 0 )
var b = NSNumber( value: false )
La confusion est peut-être en train de s'installer parce que ça marche.
w = String( "4" )
La classe String n'a pas besoin de l'étiquette de l'argument, tandis que NSNumber a besoin de l'étiquette de l'argument 'value:'.
Peut-être est-ce dû à la façon dont IOS traite le NSNumber comme provenant d'un héritage ?