Wie verwende ich mathematische Funktionen wie sqrt()
, floor()
, round()
, sin()
, etc?
Dabei:
_ = floor(2.0)
_ = sqrt(2.0)
Ich bekomme:
Fehler: Verwendung des nicht aufgelösten Bezeichners 'Etage'
Fehler: Verwendung des nicht aufgelösten Bezeichners 'sqrt'
Ambiguous reference to x
Antwort erhalten, überprüfen Sie diese Antwort: stackoverflow.com/a/34357943/1359306Antworten:
Wie bereits erwähnt, haben Sie mehrere Möglichkeiten. Wenn Sie nur mathematische Funktionen wollen. Sie können nur Darwin importieren.
Wenn Sie mathematische Funktionen und andere Standardklassen und -funktionen wünschen. Sie können Foundation importieren.
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.
Für iOS müssen Sie UIKit importieren.
Sie können Ihre Spielplatzplattform leicht entdecken, indem Sie den Dateiinspektor (⌥⌘1) öffnen.
quelle
No such module 'Cocoa'
Um genau zu sein, ist Darwin genug. Es ist nicht erforderlich, das gesamte Cocoa-Framework zu importieren.
Wenn Sie Elemente aus Cocoa oder Foundation oder anderen übergeordneten Frameworks benötigen, können Sie diese natürlich importieren
quelle
sqrt
,floor
undround
weil Sie nativ bzw. verwenden können0.5.squareRoot()
,Int(0.5)
und0.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:
Sie können die Entwicklung des Foundation Frameworks hier verfolgen , um mehr zu erfahren
EDIT: 26. Dezember 2018
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 werdenDouble.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.quelle
sqrt
,floor
undround
weil Sie nativ bzw. verwenden können0.5.squareRoot()
,Int(0.5)
und0.5.round()
.pow
ichGlibc
für Linux einbinden, danke!Sie können sie direkt inline verwenden:
quelle
[1,2,3]
es würde zurückkehreny = x
oder ich würde es geben [1,4,9] es würde zurückkehreny = 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
quelle
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 verwendenrounded(_:)
:Diese sind derzeit auf
Float
undDouble
es sollte einen leicht genug , um zu konvertieren seinCGFloat
zum Beispiel.Stattdessen
sqrt()
gibt es diesquareRoot()
Methode für das FloatingPoint-Protokoll. Wieder beideFloat
undDouble
entsprechen demFloatingPoint
Protokoll: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.
quelle