Jak używać funkcji matematycznych, takich jak sqrt(), floor(), round(), sin(), etc?
Robiąc:
_ = floor(2.0)
_ = sqrt(2.0)
Dostaję:
błąd: użycie nierozwiązanego identyfikatora „podłoga”
błąd: użycie nierozwiązanego identyfikatora „sqrt”

Odpowiedzi:
Jak zauważyli inni, masz kilka opcji. Jeśli chcesz tylko funkcje matematyczne. Możesz importować tylko Darwina.
import Darwin
Jeśli potrzebujesz funkcji matematycznych i innych standardowych klas i funkcji. Możesz zaimportować Foundation.
import Foundation
Jeśli chcesz wszystkiego, a także klas dla interfejsu użytkownika, zależy to od tego, czy Twój plac zabaw jest na OS X czy iOS.
W przypadku OS X musisz importować kakao.
import Cocoa
W przypadku iOS musisz importować UIKit.
import UIKit
Możesz łatwo odkryć swoją platformę zabaw, otwierając Inspektor plików (⌥⌘1).

No such module 'Cocoa'
Aby być doskonale precyzyjnym, Darwin wystarczy. Nie ma potrzeby importowania całego frameworka Cocoa.
import Darwin
Oczywiście, jeśli potrzebujesz elementów z Cocoa, Foundation lub innych frameworków wyższego poziomu, możesz je zamiast tego zaimportować
sqrt, floora roundponieważ można użyć odpowiednio natywnie 0.5.squareRoot(), Int(0.5)a 0.5.round().
Dla osób używających swift [2.2] na Linuksie, tj. Ubuntu, import jest inny!
Prawidłowym sposobem na to jest użycie Glibc. Dzieje się tak, ponieważ na OS X i iOS podstawowe API podobne do Unix znajdują się w Darwinie, ale w Linuksie znajdują się w Glibc. Importing Foundation ci tutaj nie pomoże, ponieważ sama nie robi tego rozróżnienia. Aby to zrobić, musisz jawnie zaimportować go samodzielnie:
#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif
Możesz śledzić rozwój frameworka Foundation tutaj, aby dowiedzieć się więcej
Jak wskazał przez @ Coeur , począwszy od szybkich 3.0 niektóre funkcje matematyczne są teraz częścią samych typów. Na przykład Double ma teraz squareRoot . Podobnie ceil, floor, roundmoże być w całości osiągnąć Double.rounded(FloatingPointRoundingRule) -> Double.
Co więcej, właśnie pobrałem i zainstalowałem najnowszą stabilną wersję Swift na Ubuntu 18.04 i wygląda na to, że Foundationframework to wszystko, czego potrzebujesz do zaimportowania, aby mieć teraz dostęp do funkcji matematycznych. Próbowałem znaleźć odpowiednią dokumentację, ale nic nie wyszło.
➜ 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, floora roundponieważ można użyć odpowiednio natywnie 0.5.squareRoot(), Int(0.5)a 0.5.round().
powmusiałem dołączyć Glibcdo systemu Linux, dzięki!
Możesz ich używać bezpośrednio w tekście:
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]wróci y = xlub dałbym temu [1,4,9] to wróci y = x^2lub coś po prostu zamknie się w ten sposóbf(x)
Aby korzystać z funkcji matematycznych, musisz import Cocoa
Możesz zobaczyć inne zdefiniowane funkcje matematyczne w następujący sposób. Wykonaj Cmd-Kliknij nazwę funkcjisqrt i wejdź do pliku ze wszystkimi innymi globalnymi funkcjami matematycznymi i stałymi.
Mały fragment pliku
...
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 Cocoaich użyć.
Aby działać w trybie Swift, możesz spróbować skorzystać z narzędzi dostępnych w bibliotece Swift Standard Library. Powinny one działać na każdej platformie, na której można uruchomić Swift.
Zamiast floor(), round()a reszta zaokrąglenia procedury można użyć 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"
Są one obecnie dostępne na Floati Doublepowinny być łatwe do konwersji CGFloatna przykład na.
Zamiast tego sqrt()istnieje squareRoot()metoda w protokole FloatingPoint. Ponownie, oba Floati Doublezgodne z FloatingPointprotokołem:
let x = 4.0
let y = x.squareRoot()
W przypadku funkcji trygonometrycznych standardowa biblioteka nie może pomóc, więc najlepiej importuj Darwina na platformy Apple lub Glibc w systemie Linux. Trzymamy kciuki, że w przyszłości będą bardziej schludne.
#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 xsprawdź tę odpowiedź: stackoverflow.com/a/34357943/1359306