Respuestas:
Como señalaron otros, tiene varias opciones. Si solo quieres funciones matemáticas. Solo puede importar Darwin.
import Darwin
Si desea funciones matemáticas y otras clases y funciones estándar. Puede importar Foundation.
import Foundation
Si quieres todo y también clases para la interfaz de usuario, depende de si tu patio de juegos es para OS X o iOS.
Para OS X, necesita importar Cocoa.
import Cocoa
Para iOS, necesita importar UIKit.
import UIKit
Puede descubrir fácilmente su plataforma de juegos abriendo File Inspector (⌥⌘1).
No such module 'Cocoa'
Para ser perfectamente preciso, Darwin es suficiente. No es necesario importar todo el marco de Cocoa.
import Darwin
Por supuesto, si necesita elementos de Cocoa o Foundation u otros marcos de nivel superior, puede importarlos en su lugar
sqrt
, floor
y round
porque puede usar de forma nativa 0.5.squareRoot()
, respectivamente , Int(0.5)
y 0.5.round()
.
Para las personas que usan swift [2.2] en Linux, es decir, Ubuntu, ¡la importación es diferente!
La forma correcta de hacer esto es usar Glibc. Esto se debe a que en OS X e iOS, las API básicas similares a Unix están en Darwin, pero en Linux, se encuentran en Glibc. Importar Foundation no lo ayudará aquí porque no hace la distinción por sí mismo. Para hacer esto, debe importarlo explícitamente usted mismo:
#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif
Puede seguir el desarrollo del marco Foundation aquí para obtener más información.
Como se ha señalado por @ Coeur , a partir de 3,0 veloz algunas funciones matemáticas son ahora parte de los mismos tipos. Por ejemplo, Double ahora tiene una función squareRoot . Del mismo modo, ceil
, floor
, round
, todo puede lograrse con Double.rounded(FloatingPointRoundingRule) -> Double
.
Además, acabo de descargar e instalar la última versión estable de swift en Ubuntu 18.04, y parece que el Foundation
marco es todo lo que necesita importar para tener acceso a las funciones matemáticas ahora. Intenté encontrar documentación para esto, pero no surgió nada.
➜ 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
sqrt
, floor
y round
porque puede usar de forma nativa 0.5.squareRoot()
, respectivamente , Int(0.5)
y 0.5.round()
.
pow
necesitaba incluirlo Glibc
para Linux, ¡gracias!
Puede usarlos directamente en línea:
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,2,3]
volvería y = x
o le daría [1, 4, 9] volvería y = x^2
o algo parecido de esa maneraf(x)
Para usar las funciones matemáticas tienes que import Cocoa
Puede ver las otras funciones matemáticas definidas de la siguiente manera. Haga un Cmd-Click en el nombre de la función sqrt
e ingrese el archivo con todas las demás funciones matemáticas globales y constanst.
Un pequeño fragmento del archivo
...
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) */
...
import Cocoa
usarlos.
Para la forma Swift de hacer las cosas, puede probar y hacer uso de las herramientas disponibles en la Biblioteca estándar de Swift. Estos deberían funcionar en cualquier plataforma que pueda ejecutar Swift.
En lugar de floor()
, round()
y el resto de las rutinas de redondeo, puede utilizar rounded(_:)
:
let x = 6.5
// Equivalent to the C 'round' function:
print(x.rounded(.toNearestOrAwayFromZero))
// Prints "7.0"
// Equivalent to the C 'trunc' function:
print(x.rounded(.towardZero))
// Prints "6.0"
// Equivalent to the C 'ceil' function:
print(x.rounded(.up))
// Prints "7.0"
// Equivalent to the C 'floor' function:
print(x.rounded(.down))
// Prints "6.0"
Estos están disponibles actualmente en Float
y Double
debería ser bastante fácil convertirlos a, CGFloat
por ejemplo.
En lugar de sqrt()
está el squareRoot()
método en el protocolo FloatingPoint. Nuevamente, ambos Float
y se Double
ajustan al FloatingPoint
protocolo:
let x = 4.0
let y = x.squareRoot()
Para las funciones trigonométricas, la biblioteca estándar no puede ayudar, por lo que es mejor que importe Darwin en las plataformas Apple o Glibc en Linux. Con los dedos cruzados, serán una forma más ordenada en el futuro.
#if os(OSX) || os(iOS)
import Darwin
#elseif os(Linux)
import Glibc
#endif
let x = 1.571
print(sin(x))
// Prints "~1.0"
Ambiguous reference to x
respuesta, consulte esta respuesta: stackoverflow.com/a/34357943/1359306