Risposte:
Come altri hanno notato, hai diverse opzioni. Se vuoi solo funzioni matematiche. Puoi importare solo Darwin.
import Darwin
Se vuoi funzioni matematiche e altre classi e funzioni standard. Puoi importare Foundation.
import Foundation
Se vuoi tutto e anche le classi per l'interfaccia utente, dipende se il tuo playground è per OS X o iOS.
Per OS X, è necessario importare Cocoa.
import Cocoa
Per iOS, è necessario importare UIKit.
import UIKit
Puoi scoprire facilmente la tua piattaforma playground aprendo File Inspector (⌥⌘1).
No such module 'Cocoa'
Per essere perfettamente precisi, Darwin è sufficiente. Non è necessario importare l'intero framework Cocoa.
import Darwin
Ovviamente, se hai bisogno di elementi da Cocoa o Foundation o altri framework di livello superiore, puoi invece importarli
sqrt
, floor
e round
poiché puoi usare nativamente rispettivamente 0.5.squareRoot()
, Int(0.5)
e 0.5.round()
.
Per le persone che utilizzano swift [2.2] su Linux, ad esempio Ubuntu, l'importazione è diversa!
Il modo corretto per farlo è usare Glibc. Questo perché su OS X e iOS, le API di base simili a Unix sono in Darwin ma in Linux, queste si trovano in Glibc. Importare Foundation non ti aiuterà qui perché non fa la distinzione da solo. Per fare ciò, devi importarlo esplicitamente da solo:
#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif
Puoi seguire lo sviluppo del framework Foundation qui per saperne di più
Come sottolineato da @ Cœur , a partire da swift 3.0 alcune funzioni matematiche fanno ora parte dei tipi stessi. Ad esempio, Double ora ha una funzione squareRoot . Analogamente, ceil
, floor
, round
, possono tutti essere realizzato con Double.rounded(FloatingPointRoundingRule) -> Double
.
Inoltre, ho appena scaricato e installato l'ultima versione stabile di swift su Ubuntu 18.04, e sembra che Foundation
framework sia tutto ciò di cui hai bisogno per importare per avere accesso alle funzioni matematiche ora. Ho provato a trovare la documentazione per questo, ma non è venuto fuori nulla.
➜ 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
e round
poiché puoi usare nativamente rispettivamente 0.5.squareRoot()
, Int(0.5)
e 0.5.round()
.
pow
avevo bisogno di includere Glibc
per Linux, grazie!
Puoi usarli direttamente in linea:
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]
sarebbe tornato y = x
o lo avrei dato [1,4,9] sarebbe tornato y = x^2
o qualcosa si sarebbe semplicemente chiuso in quel modo dif(x)
Per usare le funzioni matematiche devi import Cocoa
Puoi vedere le altre funzioni matematiche definite nel modo seguente. Fai un Cmd-Click sul nome della funzionesqrt
e inserisci il file con tutte le altre funzioni matematiche globali e costanti.
Un piccolo frammento del file
...
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
usarli.
Per il modo Swift di fare le cose, puoi provare a utilizzare gli strumenti disponibili nella libreria Swift Standard. Dovrebbero funzionare su qualsiasi piattaforma in grado di eseguire Swift.
Invece di floor()
, round()
e il resto delle routine di arrotondamento che è possibile utilizzare 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"
Questi sono attualmente disponibili su Float
e Double
e dovrebbe essere abbastanza facile convertirli in un file, CGFloat
ad esempio.
Invece di sqrt()
c'è il squareRoot()
metodo sul protocollo FloatingPoint. Di nuovo, entrambi Float
e Double
conformi al FloatingPoint
protocollo:
let x = 4.0
let y = x.squareRoot()
Per le funzioni trigonometriche, la libreria standard non può essere d'aiuto, quindi è meglio importare Darwin sulle piattaforme Apple o Glibc su Linux. Incrociamo le dita, saranno un modo più ordinato in 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
controllo questa risposta: stackoverflow.com/a/34357943/1359306