101 votes

Fonctions mathématiques dans Swift

Comment utiliser des fonctions mathématiques comme sqrt() , floor() , round() , sin() etc.


Quand on le fait :

_ = floor(2.0)
_ = sqrt(2.0)

J'ai compris :

erreur : utilisation d'un identifiant non résolu 'floor'.
erreur : utilisation d'un identifiant non résolu 'sqrt'.

enter image description here

0 votes

Si vous obtenez le Ambiguous reference to x Vérifiez cette réponse : stackoverflow.com/a/34357943/1359306

101voto

Tomáš Linhart Points 1399

Comme d'autres l'ont souligné, vous avez plusieurs options. Si vous ne voulez que des fonctions mathématiques. Vous pouvez importer uniquement Darwin.

import Darwin

Si vous voulez des fonctions mathématiques et d'autres classes et fonctions standard. Vous pouvez importer Foundation.

import Foundation

Si vous voulez tout et aussi des classes pour l'interface utilisateur, cela dépend si votre terrain de jeu est pour OS X ou iOS.

Pour OS X, vous devez importer Cocoa.

import Cocoa

Pour iOS, vous devez importer UIKit.

import UIKit

Vous pouvez facilement découvrir votre plate-forme de jeu en ouvrant l'inspecteur de fichiers (1).

Playground Settings - Platform

6 votes

Dans le terrain de jeu Swift, j'obtiens l'erreur suivante : No such module 'Cocoa'

0 votes

@noilly : un peu tard maintenant, vous devez définir le type de fichier à iOS dans les propriétés du fichier du Playground (Cmd-Opt-0), ou importer UIKit à la place, selon le commentaire ci-dessus.

1 votes

Le module 'Cocoa' n'existe pas

78voto

bpresles Points 361

Pour être parfaitement précis, Darwin suffit. Pas besoin d'importer l'ensemble du framework Cocoa.

import Darwin

Bien sûr, si vous avez besoin d'éléments de Cocoa ou de Foundation ou d'autres cadres de plus haut niveau, vous pouvez les importer à la place.

0 votes

Et avec Swift 3+, vous n'avez pas besoin de Darwin (ou de Glibc) pour sqrt , floor y round car vous pouvez utiliser nativement respectivement 0.5.squareRoot() , Int(0.5) y 0.5.round() .

17voto

Smac89 Points 1926

Pour les personnes utilisant swift [2.2] sous Linux, c'est-à-dire Ubuntu, l'importation est différente !

La bonne façon de procéder est d'utiliser la Glibc. En effet, sous OS X et iOS, les API de base de type Unix se trouvent dans Darwin, alors que sous Linux, elles se trouvent dans Glibc. L'importation de Foundation ne vous aidera pas ici car elle ne fait pas la distinction par elle-même. Pour ce faire, vous devez l'importer explicitement vous-même :

#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif

Vous pouvez suivre le développement du cadre de la Fondation aquí pour en savoir plus


EDIT : 26 décembre 2018

Comme a souligné par @Cœur À partir de swift 3.0, certaines fonctions mathématiques font désormais partie des types eux-mêmes. Par exemple, Double a maintenant un squareRoot fonction. De même, ceil , floor , round peuvent tous être réalisés avec Double.rounded(FloatingPointRoundingRule) -> Double .

De plus, je viens de télécharger et d'installer la dernière version stable de swift sur Ubuntu 18.04, et cela ressemble à ceci Foundation est tout ce que vous devez importer pour avoir accès aux fonctions mathématiques maintenant. J'ai essayé de trouver de la documentation à ce sujet, mais je n'ai rien trouvé.

 swift          
Welcome to Swift version 4.2.1 (swift-4.2.1-RELEASE). Type :help for assistance.
  1> sqrt(9)
error: repl.swift:1:1: error: use of unresolved identifier 'sqrt'
sqrt(9)
^~~~

  1> import Foundation
  2> sqrt(9)
$R0: Double = 3
  3> floor(9.3)
$R1: Double = 9
  4> ceil(9.3) 
$R2: Double = 10

10voto

Ben Gottlieb Points 59900

Vous pouvez les utiliser directement en ligne :

var square = 9.4
var floored = floor(square)
var root = sqrt(floored)

println("Starting with \(square), we rounded down to \(floored), then took the square root to end up with \(root)")

1 votes

J'obtiens l'erreur suivante : utilisation d'un identifiant non résolu 'sqrt'.

0 votes

Je pense qu'il s'attend à ce que je déclare une fonction appelée sqrt, mais ce n'est évidemment pas ce que je veux. Merci

0 votes

Vous devez importer UIKit, ou Cocoa, ou Foundation.

8voto

DanEEStar Points 1531

Pour utiliser les fonctions mathématiques, vous devez import Cocoa

Vous pouvez voir les autres fonctions mathématiques définies de la manière suivante. Faites un Cmd-Clic sur le nom de la fonction sqrt et vous entrez dans le fichier avec toutes les autres fonctions mathématiques globales et constanst.

Un petit extrait du fichier

...
func pow(_: CDouble, _: CDouble) -> CDouble

func sqrtf(_: CFloat) -> CFloat
func sqrt(_: CDouble) -> CDouble

func erff(_: CFloat) -> CFloat
...
var M_LN10: CDouble { get } /* loge(10)       */
var M_PI: CDouble { get } /* pi             */
var M_PI_2: CDouble { get } /* pi/2           */
var M_SQRT2: CDouble { get } /* sqrt(2)        */
...

1 votes

Il s'agit en fait d'une réponse à la question "Comment utiliser les fonctions mathématiques telles que sqrt(), floor(), round(), sin(), etc ".

2 votes

Ce n'est pas une réponse correcte. Ce ne sont pas des fonctions globales. Vous devez import Cocoa pour les utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X