Antworten:
Wie bereits erwähnt, haben Sie mehrere Möglichkeiten. Wenn Sie nur mathematische Funktionen wollen. Sie können nur Darwin importieren.
import Darwin
Wenn Sie mathematische Funktionen und andere Standardklassen und -funktionen wünschen. Sie können Foundation importieren.
import Foundation
Wenn Sie alles und auch Klassen für die Benutzeroberfläche möchten, hängt es davon ab, ob Ihr Spielplatz für OS X oder iOS ist.
Für OS X müssen Sie Cocoa importieren.
import Cocoa
Für iOS müssen Sie UIKit importieren.
import UIKit
Sie können Ihre Spielplatzplattform leicht entdecken, indem Sie den Dateiinspektor (⌥⌘1) öffnen.
No such module 'Cocoa'
Um genau zu sein, ist Darwin genug. Es ist nicht erforderlich, das gesamte Cocoa-Framework zu importieren.
import Darwin
Wenn Sie Elemente aus Cocoa oder Foundation oder anderen übergeordneten Frameworks benötigen, können Sie diese natürlich importieren
sqrt
, floor
und round
weil Sie nativ bzw. verwenden können 0.5.squareRoot()
, Int(0.5)
und 0.5.round()
.
Für Leute, die swift [2.2] unter Linux, dh Ubuntu, verwenden, ist der Import anders!
Der richtige Weg, dies zu tun, ist die Verwendung von Glibc. Dies liegt daran, dass sich unter OS X und iOS die grundlegenden Unix-ähnlichen APIs in Darwin befinden, unter Linux jedoch in Glibc. Das Importieren von Foundation hilft Ihnen hier nicht weiter, da es nicht von selbst unterscheidet. Dazu müssen Sie es explizit selbst importieren:
#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif
Sie können die Entwicklung des Foundation Frameworks hier verfolgen , um mehr zu erfahren
Wie wies darauf hin , durch @ Cœur , von einer schnellen 3.0 sind einige mathematische Funktionen beginnen jetzt Teil der Typen selbst. Zum Beispiel hat Double jetzt eine squareRoot- Funktion. In ähnlicher Weise ceil
, floor
, round
können alle mit erreicht werden Double.rounded(FloatingPointRoundingRule) -> Double
.
Außerdem habe ich gerade die neueste stabile Version von swift unter Ubuntu 18.04 heruntergeladen und installiert, und es sieht so aus, als ob Sie nur das Foundation
Framework importieren müssen, um auf die mathematischen Funktionen zugreifen zu können. Ich habe versucht, eine Dokumentation dafür zu finden, aber es kam nichts heraus.
➜ 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
und round
weil Sie nativ bzw. verwenden können 0.5.squareRoot()
, Int(0.5)
und 0.5.round()
.
pow
ich Glibc
für Linux einbinden, danke!
Sie können sie direkt inline verwenden:
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]
es würde zurückkehren y = x
oder ich würde es geben [1,4,9] es würde zurückkehren y = x^2
oder etwas in der Nähe von sof(x)
Um die mathematischen Funktionen nutzen zu können, müssen Sie import Cocoa
Sie können die anderen definierten mathematischen Funktionen folgendermaßen sehen. Machen Sie einen Cmd-Klick auf den Funktionsnamen sqrt
und Sie geben die Datei mit allen anderen globalen mathematischen Funktionen und Konstanten ein.
Ein kleiner Ausschnitt aus der Datei
...
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
sie verwenden.
Für die Swift-Vorgehensweise können Sie versuchen, die in der Swift Standard Library verfügbaren Tools zu verwenden. Diese sollten auf jeder Plattform funktionieren, auf der Swift ausgeführt werden kann.
Statt floor()
, round()
und der Rest der Runden - Routinen können Sie verwenden 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"
Diese sind derzeit auf Float
und Double
es sollte einen leicht genug , um zu konvertieren sein CGFloat
zum Beispiel.
Stattdessen sqrt()
gibt es die squareRoot()
Methode für das FloatingPoint-Protokoll. Wieder beide Float
und Double
entsprechen dem FloatingPoint
Protokoll:
let x = 4.0
let y = x.squareRoot()
Für die trigonometrischen Funktionen kann die Standardbibliothek nicht helfen. Importieren Sie Darwin am besten auf den Apple-Plattformen oder Glibc unter Linux. Mit gekreuzten Fingern werden sie in Zukunft ordentlicher sein.
#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
Antwort erhalten, überprüfen Sie diese Antwort: stackoverflow.com/a/34357943/1359306